我已经使用"all_frames": true
向所有页面和内部iframe注入了内容脚本文件,但是当我从弹出窗口发送请求时,只有顶部窗口正在接收它。任何想法如何将它发送到所有内部框架或至少最后聚焦的窗口/文档?
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({...});
});
我已检查过内容脚本是否正在内部框架中运行。
我正在尝试检索可能位于内部框架中的文本选择。
(顺便说一句,我不希望每个内容脚本都打开连接,这是一个很大的开销。)
答案 0 :(得分:3)
问题是一个标签只能有一个onRequest
监听器。因此,如果您要向
//listen to requests only inside iframe
if(window!=window.top) {
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
...
});
}
现在,如果您要向
端口仍然有类似的限制 - 只会调用一个端口侦听器,但您可以打开许多端口。如果只有一个iframe的父页面 - 您只需在两个不同的端口上打开两个连接。但是如果页面上有很多iframe,并且每个iframe都有子帧 - 您需要首先枚举所有iframe,为每个iframe创建唯一的端口。
PS。
我不确定你的意思我不想通过所有内容脚本打开连接
但如果您想按需注入内容脚本,则有chrome.tabs.executeScript()
。