亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在沒有 DOM 的情況下獲取元素高度?

如何在沒有 DOM 的情況下獲取元素高度?

海綿寶寶撒 2021-10-21 15:41:41
我正在構建一個 SSR angular 應用程序,我得到了一些處理不同模板位置的邏輯,但為了完成邏輯,我需要每個模板的元素高度而不使用 DOM。項目簡而言之我正在構建一個應用程序,將 HTML 樣式設置為看起來像 PDF,然后使用該 HTML 使用 Aspose 創建 PDF。為什么是 SSR?其他平臺需要 SSR,而不是瀏覽器來獲取 HTML,然后呈現為 PDF。即,我有一個能夠調用 SSR 應用程序的 Api,獲取完整的 HTML 并將其打印為 PDF。為什么是角?整個項目建立在 Angular 之上,我需要能夠重用呈現類似 PDF 的 HTML 的組件,以便在 HTML 中直接編輯。現在你已經跟上了,回到手頭的問題HTML 由多個模板組成,這些模板的高度根據添加的數據而變化。為了將部分向下(或向上)推送到相應的頁面,我需要每個模板的高度(添加數據后)以了解內容是否超過頁面高度。當通過瀏覽器導航到 SSR 應用程序時,一切都呈現得很好,因為我能夠利用 DOM 并查詢每個模板來獲取元素的高度。但通過API訪問應用程序時,或郵差我得到的HTML回來,但邏輯處理該部分展示位置被打破,因為它好好嘗試一下有高度- SO我需要獲得/計算每個模板的高度WITHOUT使用DOM。到目前為止我發現了什么我是 SSR 的新手,但所有操作 DOM 或只有瀏覽器引擎才有的東西似乎都不是可行的方法 - 因此@ViewChild,在這種情況下不能使用ngAfterViewInit,setTimeout和其他 DOM Api 或功能。我需要能夠在生命周期步驟 NgOnInit(最遲)預渲染每個模板。使用像Mustache或HandleBars這樣的庫可以從我提供的數據中很好地呈現 HTML,但我只得到 Html - 根本沒有尺寸。我還嘗試createElement('div')在 Mustache 或 HandleBars 創建元素并將其添加到新創建的div. 這將元素添加到div'schildnodes但它不計算高度。也許我錯過了使用這些庫之一的東西?甚至有可能嗎?到目前為止,我的印象是無法在不輸入 DOM 的情況下從代碼中獲取元素尺寸?無頭鉻?運行 Headless Chrome 是創建一種我可以從代碼操作的虛擬 DOM 的唯一方法嗎?抱歉所有的文字和最少的代碼,但這個問題更多的是關于我的方法應該如何以及我是否朝著錯誤的方向前進。提前致謝!
查看完整描述

2 回答

?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

解決這個問題的方法是使用 Headless Chrome - 至少在我的情況下。如果沒有 DOM,您將無法渲染高度,如果您沒有瀏覽器引擎來為您渲染高度,則您需要啟動一個可以的引擎 - 即 Headless Chrome。


使用Puppeteer對我來說是最簡單的方法。


查看完整回答
反對 回復 2021-10-21
  • 2 回答
  • 0 關注
  • 352 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號