-1

Chrome でページ アクション拡張機能を作成しようとしています。ページアクションをクリックすると表示されるポップアップに対応するhtmlページがあります。popup.jsこの html ページにスクリプト ファイルを含めました。このページから、バックグラウンド js ファイルにメッセージを送信しようとしていますbackground.js。問題は、私が呼び出しているのはsendRequest1 回だけ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

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 に答える
0

彼らは一度だけ働くはずです。

長期間有効なメッセージング システムを使用するか、コンテンツ スクリプトからメッセージを受信したときに同じハンドラを何度も再アタッチすることができます。

于 2012-05-18T11:55:04.590 に答える