簡體   English   中英

設置window.open()的HTML在Internet Explorer中產生奇怪的樣式問題

[英]Setting HTML of window.open() producing strange styling issues in Internet Explorer

所以我有一些JavaScript可以打開一個沒有目標URL的新窗口。 然后,我想將該窗口的HTML內容設置為變量的內容,即一長串有效的HTML。

var myHtmlHead = "<link href='/foo/my.css'...";
var myHtmlBody = "<div id='foo'>...'";
var myWindow= window.open("", "MyWindow","height=500,width=500");

myWindow.document.head.innerHTML = myHtmlHead;
myWindow.document.body.innerHTML = myHtmlBody;

為了便於閱讀,我刪去了內容。 問題是,盡管它在Chrome和Firefox中完美運行,但IE引發了許多奇怪的樣式問題; CSS加載,但所有DIV都居中且重疊,並且一旦我調整窗口大小甚至是像素,它就會自動校正。 我認為這是由於以下事實:在加載窗口之后,我正在加載CSS,並且在窗口需要重繪之前,它無法正確應用。

是否有辦法解決此問題,或以編程方式從父頁面的JS觸發重繪?

編輯:IE版本是11.0.9600,盡管它與Chrome 49兼容。

我真的不明白這樣做的意義。 最佳做法是創建另一個頁面,然后通過URL發送變量以動態生成內容。

無論如何,Chrome和Firefox都比IE“更智能”。 您必須有一些HTML驗證問題。 我可以看到在您的示例中您缺少了<doctype>
我建議打印myWindow變量並檢查HTML是否有效,這可以幫助您:
https://validator.w3.org/

鑒於信息量少(例如,不是完整的最小HTML文本集,例如,瀏覽器版本上沒有詳細信息,等等),這有點猜測。頁面呈現后,選擇一個具有布局的元素(例如div)並強制頁面重排。 這是應該執行的功能-通過查詢屬性。 -這未經測試

function forceReflow(myelement){
    var myforceheight = myelement.offsetHeight;
}

此處提供一些背景信息: https : //gist.github.com/paulirish/5d52fb081b3570c81e3a

通過繼續實驗找到了答案。 就我自己而言,我能夠獲得更加一致的結果,但是在設置<body>內容之后,使用CSS鏈接設置<head> html。 IE似乎可以更好地處理CSS的應用,盡管我不能說為什么。

以前似乎正在應用樣式(顏色,字體,背景等),但未使用大小,位置,顯示布局等位置信息。設置<body>內容后設置<head>似乎可以解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM