对于在quirks模式parent中运行的标准模式iframe,document.querySelector未定义

时间:2013-03-26 23:15:44

标签: javascript internet-explorer-10 quirks-mode selectors-api

使用书签运行IE 10时遇到这种情况。当我针对以怪异模式运行的页面运行bookmarklet并尝试使用document.querySelector时,document.querySelector未定义。

为了解决这个问题,当我检测到document.documentMode为5(怪癖模式)时,我创建了一个iframe并将页面内容复制到该iframe中,使其处于标准模式。我验证iframe中的文档是否处于标准模式(document.documentMode是8-IE 8标准模式),但document.querySelector仍未定义。我相信documentMode必须至少为9才能支持querySelector。我无法弄清楚为什么documentMode是8而不是10,因为我在IE 10上运行。

if(goog.userAgent.IE && document.documentMode <= 5) {
    // strip out any scripts from the body
    s = document.body.innerHTML.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '');

    frame = goog.dom.iframe.createBlank(goog.dom.getDomHelper());
    frame.scrolling = "no";
    frame.allowTransparency = true;
    frame.style.visibility = 'hidden';
    document.body.appendChild(frame);

    goog.dom.iframe.writeContent(frame, '<!doctype html>\n<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge"></head><body>' + s + '</body></html>');

    doc = goog.dom.getFrameContentDocument(frame);
    alert(doc.documentMode); // 8 - IE 8 standards mode
    alert(doc.querySelectorAll); // null
}

1 个答案:

答案 0 :(得分:1)

  

我使用documentMode而不是简单地检查(if(document.querySelector))来帮助我进一步调试这个问题