web-dev-qa-db-ja.com

コンテンツスクリプトからウィンドウ変数にアクセスする

変数window.my_variable_nameが存在する場合、すべての参照URL(およびすべてのブラウザーURLのすべてのiframe)を検索しようとするChrome拡張機能があります。

だから私はこの小さなコンテンツスクリプトを書きました:

function detectVariable(){
    if(window.my_variable_name || typeof my_variable_name !== "undefined") return true;
    return false;
}

長時間試行した後、コンテンツスクリプトがいくつかのサンドボックスで実行されているようです。

Chromeコンテンツスクリプトからwindow要素にアクセスする方法はありますか?

23

知っておくべき重要なことの1つは、コンテンツスクリプトは現在のページと同じDOMを共有しますが、変数へのアクセスを共有しないことです。このケースを処理する最良の方法は、コンテンツスクリプトから、ページ内の変数を読み取る現在のDOMにスクリプトタグを挿入することです。

manifest.json内:

"web_accessible_resources" : ["/js/my_file.js"],

contentScript.js:

function injectScript(file, node) {
    var th = document.getElementsByTagName(node)[0];
    var s = document.createElement('script');
    s.setAttribute('type', 'text/javascript');
    s.setAttribute('src', file);
    th.appendChild(s);
}
injectScript( chrome.extension.getURL('/js/my_file.js'), 'body');

my_file.js:

// Read your variable from here and do stuff with it
console.log(window.my_variable);
58