3

我有这个用于 Gmail 的脚本。它在canvas_frameiframe 内运行。
我想使用parent.document. 但在 Chrome 中告诉我它是未定义的。在 Firefox 中运行良好,但在 Chrome 上运行良好。
那么我究竟如何在 Chrome 中从 iframe 中获取父文档的句柄。
铬版本: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) }
}

这部分只是undefined在日志窗口中无休止地输出。
这是一个产生相同结果的测试脚本。它undefined不断地输出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();
})();
4

2 回答 2

4

Chrome 中的用户脚本是有限的,尤其是在 iframe 方面。

有什么理由你不能以其他方式做到这一点?例如:

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

这里更好的答案是Chrome Extensions,您可以使用Content Script而不是 User Script 进行更多控制。

于 2011-03-06T18:09:07.720 回答
0

我终于意识到,在 Google Chrome 中,用户脚本被拒绝访问window.parent.
只有当我将脚本注入网页时它才会起作用。

于 2011-03-10T06:54:04.993 回答