インターフェースを変換するためのプラグインを作成しています。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.executeScript
in を使用してbg.js
メイン コンテンツ スクリプト内の関数をトリガーする方法があります。