Chrome の拡張機能コンテンツ スクリプトから iframe コンテンツにアクセスする 質問する

Chrome の拡張機能コンテンツ スクリプトから iframe コンテンツにアクセスする 質問する

インターフェースを変換するためのプラグインを作成しています。unsafe javascript attempt to access frame with url.... Domains, protocols and ports must match(典型的なクロスサイトの問題) が頻繁に発生します。

しかし、拡張機能なのでiframeのコンテンツにアクセスできる必要がありますhttp://code.google.com/chrome/extensions/content_scripts.html...

キャプチャできるようにその内容にアクセスする方法を知っている人はいますか?

ベストアンサー1

通常、異なるオリジンのオブジェクトに直接アクセスする方法はありませんwindow安全に異なるフレーム内のコンテンツ スクリプト間で通信するには、バックグラウンド ページにメッセージを送信し、そのメッセージをタブに返す必要があります。

次に例を示します。

一部のmanifest.json

"background": {"scripts":["bg.js"]},
"content_scripts": [
    {"js": ["main.js"], "matches": ["<all_urls>"]},
    {"js": ["sub.js"], "matches": ["<all_urls>"], "all_frames":true}
]

main.js:

var isTop = true;
chrome.runtime.onMessage.addListener(function(details) {
    alert('Message from frame: ' + details.data);
});

sub.js:

if (!window.isTop) { // true  or  undefined
    // do something...
    var data = 'test';
    // Send message to top frame, for example:
    chrome.runtime.sendMessage({sendBack:true, data:data});
}

バックグラウンド スクリプト 'bg.js':

chrome.runtime.onMessage.addListener(function(message, sender) {
    if (message.sendBack) {
        chrome.tabs.sendMessage(sender.tab.id, message.data);
    }
});

別の方法としては、chrome.tabs.executeScriptin を使用してbg.jsメイン コンテンツ スクリプト内の関数をトリガーする方法があります。

関連文書

おすすめ記事