-1

我正在尝试在 chrome 中创建页面操作扩展。我有一个与单击页面操作时显示的弹出窗口相对应的 html 页面。我popup.js在这个 html 页面中包含了一个脚本文件。从这个页面我正在尝试向后台 js 文件发送消息background.js。问题是我sendRequest只打电话一次,popup.js但我在后台页面中多次收到它。我正在那里执行文件操作,由于并发访问而导致脚本错误。我在此处粘贴与消息传递相关的代码

扩展文件 - popup.js

chrome.extension.sendRequest({"intent" : "read"}, function (message) {
      console.log(message);
});

背景页面 - background.js

(function(){
var fileName = "credentials.txt";
var fileSystem;

function checkUrl(tabId, changeInfo, tab) {
    if(/https?:\/\/.*?\/olc/.test(tab.url)) {
        chrome.pageAction.show(tabId);
        chrome.extension.onRequest.addListener(function (request, sender, callback) {
            callback("printed");
        });
    }
}
chrome.tabs.onUpdated.addListener(checkUrl);
})();

在这种情况下,监听器被调用了 4 次。回调将被第一次调用。接下来的 3 次它给出了一个错误,说Could not send response: Cannot send a response more than once per chrome.extension.onRequest listener per document (message was sent by extension kaejjpmlibijbgbgcfodphlkcjjkmjlk).有人可以帮我吗?

4

2 回答 2

0

他们应该只工作一次。

您可以使用长期存在的消息传递系统,也可以在从内容脚本接收到消息后一遍又一遍地重新附加相同的处理程序。

于 2012-05-18T11:55:04.590 回答
0

Use chrome.extension.getBackgroundPage(). You will have access to background page from yor popup. Or write to localStorage and use listener.

window.addEventListener('storage', function (e) {}, false);

You will have problems with memory leak if you will use chrome.extension.sendRequest for comunication between popup and background.html.

于 2012-05-18T13:43:41.333 回答