我正在尝试在chrome中创建页面操作扩展。我有一个与弹出窗口相对应的html页面,在单击页面操作时显示该页面。我在这个html页面中包含了一个脚本文件popup.js
。在这个页面中,我正在尝试将消息发送到后台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).
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:0)
他们应该只工作一次。
您可以使用长期存在的邮件系统,也可以在收到内容脚本中的邮件时反复重新连接相同的处理程序。
答案 1 :(得分:0)
使用chrome.extension.getBackgroundPage()。您可以从yor popup访问后台页面。 或者写入localStorage并使用监听器。
window.addEventListener('storage', function (e) {}, false);
如果您使用chrome.extension.sendRequest在popup和background.html之间进行通信,则会遇到内存泄漏问题。