私は新しいwebextension標準を使ってFirefox拡張機能を構築しています。javascript addEventListenerとruntime.onMessage.addListener
ユーザーがページの任意の場所をクリックすると、別の機能がバックグラウンドスクリプトでタスクを実行している間に、クリックを数ミリ秒間スタンバイ状態にします。ここで
は、私のコードの一部です:
コンテンツスクリプト:
var CanContinue = false;
browser.runtime.onMessage.addListener(MsgListener);
function MsgListener(request, sender, sendResponse)
{
if (request.msg == 'can_continue')
CanContinue = true;
}
function ClickDetected(event)
{
browser.runtime.sendMessage({"msg": "doWork"});
while (! CanContinue);
}
window.addEventListener("click", function(event) {
ClickDetected(event);
}, true);
背景スクリプト:
browser.runtime.onMessage.addListener(MsgListener);
function MsgListener(msg)
{
if (msg.msg == 'doWork')
{
...
browser.tabs.sendMessage(TheTabId, {msg: 'can_continue'});
}
}
問題は、コンテンツスクリプトが受信していないということですクリックイベントが保留されている間にcan_continue
メッセージが表示されるため、while (! CanContinue)
は決して解放しない。
クリックイベントプロセスからテストすると、メッセージが正しく受信されることに注意してください。
ありがとう、私はこの方法を試してみる – user3429139