编程语言
首页 > 编程语言> > javascript-Chrome iframe父级未定义

javascript-Chrome iframe父级未定义

作者:互联网

我有这个用于Gmail的脚本.它在canvas_frame iframe中运行.
我想使用parent.document获取父文档的句柄.但是在Chrome浏览器中告诉我它是未定义的.在Firefox中可以正常工作,但在Chrome上会崩溃.
因此,如何在Chrome浏览器的iframe中精确地获取父文档的句柄.
Chrome版本:11.0.686.3

这是失败的代码:

function init() {
    try {
        if(parent == null) {
            console.log(typeof parent);
            window.setTimeout(init, 200);
            return;
        }
        // SOME MORE STUFF
    } catch(e) { console.log(e) }
}

这部分只是在日志窗口中无休止地输出未定义.
这是一个产生相同结果的测试脚本.它输出未定义,然后连续输出cQ.

// ==UserScript==
// @name           TEST SCRIPT FOR CHROME
// @version        1.0
// @namespace      1nfected
// @description    TEST
// @include        http://mail.google.com/*
// @include        https://mail.google.com/*
// ==/UserScript==

(function() {
if(document.documentElement.className != 'cQ') {
    console.log('not our frame');
    return;
}
function init() {
    if(window.parent == null) {
        console.log(typeof window.parent);
        console.log(document.documentElement.className);
        window.setTimeout(init, 1000);
        return;
    }
    console.log('Found the parent');
}
init();
})();

解决方法:

Chrome中的UserScript受限制,尤其是在涉及iframe时.

您为什么不能以其他方式这样做呢?例如:

var frame = document.getElementById('canvas_frame');
if (frame) {
  var dom = frame.contentDocument;
}

更好的答案是Chrome Extensions,您可以使用Content Script(而不是用户脚本)进行更多控制.

标签:userscripts,google-chrome,greasemonkey,javascript
来源: https://codeday.me/bug/20191102/1994591.html