アイテムをクリックしてcontext-menu
ダイアログを表示し(JQuery / Bootstrapを使用)、ユーザーが選択したテキストをAJAX経由でWebサービスに送信できるようにしています(これはすべて完全に機能します)。notification
送信したら、「送信していただきありがとうございます」というアドオンSDKを表示する予定です。
これで、通知を表示するためにコンテンツスクリプトからアドオンスクリプトにメッセージを送信する必要があることがわかりましたが、コールバック関数から送信されたときにメッセージが到着しません。
私のアドオンコード(抜粋):
var pageMod = require("page-mod");
pageMod.PageMod({
include: ['*'],
contentScriptWhen: "end",
contentScriptFile: [ data.url("js/content.js") ],
onAttach: function onAttach( worker, mod) {
worker.port.on("submittedNotif", function(msg) {
console.log('Hello');
notifications.notify({ ... });
})
}
});
コンテンツスクリプトは次のとおりです。メッセージが届いた状況と届かなかった状況を示しました。
// Handle the context-menu Item's click and show the dialog
self.on("click", function(node,data) {
self.port.emit("submittedNotif", '*** DOES NOT ARRIVE ***');
showDialog( 'DialogName', function (response) { /* Do stuff */ });
})
self.port.emit("submittedNotif", '*** Arrives OK ***');
function showDialog( str, response) {
// Dialog stuff
self.port.emit("submittedNotif", '*** DOES NOT ARRIVE ***');
}
グローバルオブジェクトだと言われself
ているので、確かにパラメータとして渡す必要はありません。コンテンツスクリプト内のどこで使用されているかによって、経由での送信self.port.emit
の動作がどのように異なるかは私にはわかりません。たとえば、スレッドの問題は認識していません。おそらくこれは私のJavaScriptの知識のギャップですが、誰かが私が間違っていることを教えてもらえますか?