Firefox
瀏覽器測試的時候發現協議沒法正常使用(開發使用的是Chrome
瀏覽器),查看相關代碼發現iframe
中內容是在建立iframe
後,經過獲取iframe
元素動態插入的。若是是用的src
屬性連接的html
是能夠正常顯示的。Firefox
下的iframe
元素,發現iframe
的src
屬性是about:blank
(1)、經過location
修改javascript
var iframe = document.createElement('iframe');
document.body.appendChild(iframe); //插入到須要的位置
iframe.contentWindow.location ='javascript:void((function() {'+ script +'})())';
複製代碼
修改後,顯示的內容閃爍後消失,說明很大多是這個src屬性引發的。
(2)、經過原生的方法設置src
或刪除src
屬性html
var iframe = document.createElement('iframe');
// 首先是設置src爲空,發現依舊閃爍後消失
iframe.src = ''
// 移除src,仍是閃爍後消失
iframe.removeAttrbute('src')
// 設置src爲javascript:void(0),仍是閃爍消失
iframe.src = javascript:void(0)
複製代碼
思考是不是本身的方向錯了?
(3)、嘗試更換插入元素的方法 以前使用的是獲取iframe
的head
和body
元素,而後使用innerHTML
去設置元素內容。更換其餘插入方法
(3.1)首先將原來的待插入的元素字符串,插入到一個新建的html
元素div
中,再使用appendChild
的方法將元素插入到iframe
中,發現結果依舊閃爍後消失;java
const iframeDom = document.getElementById('my-iframe').contentWindow.document
let tempNode = document.createElement('div');
tempNode.innerHTML = style; // style 爲樣式字符串
iframeDom.getElementsByTagName('head')[0].appendChild(tempNode.firstChild)
複製代碼
(3.2)使用DOMParser
,依舊不顯示瀏覽器
function createDocument(txt) {
const template = `<div class='child'>${txt}</div>`;
let doc = new DOMParser().parseFromString(template, 'text/html');
let div = doc.querySelector('.child');
return div;
}
const container = document.getElementById('container');
container.appendChild(createDocument(style));
複製代碼
(3.3)使用DocumentFragment
(不行)bash
const template = `<div class='child'>${style}</div>`;
let frag = document.createRange().createContextualFragment(template);
iframeDom.getElementsByTagName('head')[0].appendChild(frag) // frag.firstChild
複製代碼
Google
搜索src
的方向應該是對的,從新設置src
爲'javascript:'
,再到Firefox
環境中測試,發現協議已經能夠打開了。Chrome
中再去打開協議後,發現Chrome
中的協議不顯示了,可是dom
元素卻存在,因而我使用判斷瀏覽器的方法navigator.userAgent.indexOf("Firefox")
複製代碼
判斷是否爲Firefox
,若是不是就不iframe
加src='javascript:'
,至此纔算真的完了。app