3

Gmail用のこのスクリプトがあります。canvas_frameiframe内で実行されます。
を使用して、親ドキュメントへのハンドルを取得したいparent.document。しかし、Chromeではそれが未定義であると私に言います。Firefoxでは正常に動作しますが、Chromeでは爆発します。
では、Chromeでiframe内から親ドキュメントへのハンドルを正確に取得するにはどうすればよいですか。
Chrome ver: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

特にiframeに関しては、ChromeのUserScriptは制限されています。

逆にできない理由ってあるの?例えば:

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

ここでのより良い答えはChrome Extensionsです。ユーザー スクリプトの代わりにコンテンツ スクリプトを使用すると、より詳細に制御できます。

于 2011-03-06T18:09:07.720 に答える
0

私はついに、Google Chromeでは、ユーザースクリプトがへのアクセスを拒否されていることに気付きましたwindow.parent
スクリプトをWebページに挿入した場合にのみ機能します。

于 2011-03-10T06:54:04.993 に答える