вызов расширения firefox для дополнительной функции из скрипта содержимого

#javascript #firefox #firefox-addon #firefox-addon-sdk

#javascript #firefox #firefox-addon #firefox-addon-sdk

Вопрос:

я хочу запустить функцию addon[main.js ] из content script . я читал документы firefox, но у меня это не работает.это официальные документы об обмене данными между скриптамиhttps://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Content_Scripts/using_port

это мой main.js код

 var tabs = require("sdk/tabs");
var data = require("sdk/self").data;

var pageMod = require("sdk/page-mod");
pageMod.PageMod({
  include: "http://mydomain/x.html",
  contentScriptFile: data.url("listen.js")
});

self.port.on("myAddonMessage", function(myAddonMessagePayload) {
  console.log("working");
});
  

это мой listen.js скрипт содержимого

 var myContentScriptMessagePayload="hi"; 
self.port.emit("myContentScriptMessage", myContentScriptMessagePayload);
  

на самом деле я ожидаю, что console.log («работает»); этот вывод . но это не работает. может кто-нибудь мне помочь, я действительно запутался здесь .. я на самом деле хочу вызвать main.js функция из listen.js .

Ответ №1:

main.js не имеет self.port , у content-скриптов есть. В main.js вместо этого вам нужно использовать порт с тем, что инициировало content-script. Например. в PageMod документации есть больше.

 var data = require("sdk/self").data;

var pageMod = require("sdk/page-mod");
pageMod.PageMod({
  include: "http://mydomain/x.html",
  contentScriptFile: data.url("listen.js"),
  onAttach: function(worker) {
    worker.port.on("myAddonMessage", function(myAddonMessagePayload) {
      console.log("working");
    });
  }
});