Google chrome 从扩展到后台页面的消息传递
我正在尝试在chrome中创建页面操作扩展。我有一个html页面,对应于单击页面操作时显示的弹出窗口。我在这个html页面中包含了一个脚本文件Google chrome 从扩展到后台页面的消息传递,google-chrome,google-chrome-extension,chromium,message-passing,Google Chrome,Google Chrome Extension,Chromium,Message Passing,我正在尝试在chrome中创建页面操作扩展。我有一个html页面,对应于单击页面操作时显示的弹出窗口。我在这个html页面中包含了一个脚本文件popup.js。在这个页面中,我试图向后台js文件background.js发送一条消息。问题是我从popup.js只调用了一次sendRequest,但我在后台页面多次收到它。我正在那里执行一个文件操作,由于并发访问导致脚本错误。我正在粘贴与消息传递相关的代码 扩展名文件-popup.js chrome.extension.sendRequest({"
popup.js
。在这个页面中,我试图向后台js文件background.js
发送一条消息。问题是我从popup.js
只调用了一次sendRequest
,但我在后台页面多次收到它。我正在那里执行一个文件操作,由于并发访问导致脚本错误。我正在粘贴与消息传递相关的代码
扩展名文件-popup.js
chrome.extension.sendRequest({"intent" : "read"}, function (message) {
console.log(message);
});
(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);
})();
背景页面-background.js
chrome.extension.sendRequest({"intent" : "read"}, function (message) {
console.log(message);
});
(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次,它会出现一个错误,说
无法发送响应:每个chrome.extension.onRequest侦听器每个文档不能发送一次以上的响应(消息由扩展名kaejpmlibijbgbgcfodphlkcjjkmjlk发送)。
有人能帮我吗?它们应该只工作一次
您可以使用长寿命消息传递系统,也可以在从内容脚本接收消息时反复重新连接相同的处理程序。使用chrome.extension.getBackgroundPage()。您将可以从弹出窗口访问背景页面。 或者写入本地存储并使用侦听器
window.addEventListener('storage', function (e) {}, false);
如果使用chrome.extension.sendRequest在popup和background.html之间进行通信,则会出现内存泄漏问题