-1

我试图在Chrome中创建页面动作扩展。我有一个html页面,与点击页面动作时显示的弹出窗口相对应。我在这个html页面中包含了一个脚本文件popup.js。从这个页面我试图发送消息到背景js文件background.js。问题是我从popup.js只拨打sendRequest一次,但我在后台页面多次收到它。我正在做一个文件操作,由于并发访问导致脚本错误。我粘贴路过这里从扩展到后台页面传递的消息

扩展文件有关信息的代码 - 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

使用chrome.extension.getBackgroundPage()。您将有权访问yor弹出窗口中的背景页面。 或写入localStorage并使用监听器。

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

您将有内存泄漏问题,如果你会使用chrome.extension.sendRequest的弹出和background.html之间的交际。

相关问题