-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之間的交際。

相關問題