1

ブックマークレットを使用して IE 10 を実行しているときにこれを経験しています。quirks モードで実行中のページに対してブックマークレットを実行し、document.querySelector を使用しようとすると、document.querySelector が定義されていません。

これを回避するために、document.documentMode が 5 (quirks モード) であることを検出すると、iframe を作成し、ページのコンテンツをその iframe にコピーして標準モードにします。iframe 内のドキュメントが標準モード (document.documentMode は 8 - IE 8 標準モード) であることを確認しましたが、document.querySelector はまだ定義されていません。querySelector をサポートするには、documentMode が少なくとも 9 である必要があると思います。IE 10 で実行しているため、documentMode が 10 ではなく 8 である理由がわかりません。

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
}
4

1 に答える 1