私はcontext-menu
アイテムを使用しています。ユーザーが選択したテキストをWebサービスに送信するダイアログを表示します(JQuery/Bootstrapを使用)。 AJAX(これはすべて完璧に動作します)。提出されたら、私はアドオンSDK notification
を表示して、「あなたの提出をありがとう」と言うつもりです。アドオンスクリプトによって受け取られない関数/コールバックによって送信されたコンテンツスクリプトイベント
今、通知を表示するためにコンテンツスクリプトからアドオンスクリプトにメッセージを送信する必要があることはわかっていますが、コールバック関数から送信されたメッセージは届きません。
私のアドオンコード(抜粋):
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知識のギャップですが、誰かが私が間違っていることを教えてくれますか?
' self.on間、特に違いを明らかに - それがありませんダイアログが表示されます(私は添付のコードからこれらのビットを削除しました - それが間違っていれば申し訳ありません)。私が示したかったのは、そのハンドラから 'self.port.emit(" submittedNotif "、...);を実行しようとすると、メッセージが受信されないということでした。 *私がそれを行うときに、トップレベルからemit()を実行すると、メッセージが到着します(ログエントリは 'cfx'コンソールまたはError Consoleに表示されます)。だから、私にはある種のスコープ*問題が起こっているように見えます... –