小编典典

从Chrome的扩展程序内容脚本访问iframe内容

html

我正在做一个插件来对界面进行一些转换。我不断收到unsafe javascript attempt to access frame with url.... Domains, protocols and ports must match(典型的跨网站问题)

但作为扩展程序,它应该可以访问iframe的内容

没有人知道如何访问它的内容以便可以被捕获吗?


阅读 748

收藏
2020-05-10

共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.executeScriptbg.js主内容脚本来触发的功能。

2020-05-10