我正在做一个插件来对界面进行一些转换。我不断收到unsafe javascript attempt to access frame with url.... Domains, protocols and ports must match(典型的跨网站问题)
unsafe javascript attempt to access frame with url.... Domains, protocols and ports must match
但作为扩展程序,它应该可以访问iframe的内容 …
没有人知道如何访问它的内容以便可以被捕获吗?
通常,没有直接访问其他来源window对象的直接方法。如果要在不同框架中的内容脚本之间 安全地 通信,则必须将消息发送到后台页面,该页面又将消息发送回选项卡。
window
这是一个例子:
的一部分manifest.json:
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:
main.js
var isTop = true; chrome.runtime.onMessage.addListener(function(details) { alert('Message from frame: ' + details.data); });
sub.js:
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在bg.js主内容脚本来触发的功能。
chrome.tabs.executeScript
bg.js