2

我已经将内容脚本文件注入到所有页面和内部 iframe 中,"all_frames": true但是当我从弹出窗口发送请求时,只有顶部窗口正在接收它。知道如何将它发送到所有内部框架或至少最后一个焦点窗口/文档吗?

Popup.html (page action):
===========
chrome.tabs.getSelected(null, function(tab) {
    chrome.tabs.sendRequest(tab.id, {...}, function(response) {...});
});

content_script.js
=================
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    sendResponse({...});
});

我检查了内容脚本是否在内框架中工作。

我正在尝试检索可能在内部框架中的文本选择。

(顺便说一句,我不希望通过所有内容脚本打开连接,这是一个很大的开销。)

4

1 回答 1

3

问题是一个选项卡只能有一个onRequest侦听器。因此,如果您只想向iframe 脚本发送消息,并且页面上只有一个iframe,那么您应该只在 iframe 内创建一个侦听器:

//listen to requests only inside iframe
if(window!=window.top) {
    chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
        ...
    });
}

现在如果你想同时向父页面和 iframe 发送请求或者页面上有很多iframe 需要监听请求 - 你需要通过ports进行通信。

端口仍然有类似的限制 - 只会调用一个端口侦听器,但您可以打开多个端口。如果父页面只有一个 iframe - 您只需在两个不同端口上打开两个连接。但是,如果页面上有许多 iframe,并且每个 iframe 都有子框架 - 您需要先枚举所有 iframe 以为每个 iframe 创建唯一的端口。

PS。我不确定你的意思

我不希望通过所有内容脚本打开连接

但是如果你想按需注入内容脚本,有 chrome.tabs.executeScript().

于 2011-06-18T01:31:16.980 回答