Работа с контекстным меню и портом - PullRequest
1 голос
/ 13 декабря 2011

Я прочитал в , работающем со скриптами содержимого , что можно использовать порт с контекстным меню, но следующий код выдает ошибку: cm.port не определен. Тот же код работает с require("panel") при отправке события, но не с контекстным меню. Что я делаю не так?

Это main.js

const data = require('self').data;
var cm = require("context-menu").Item({
label: "asdasd",
  contentScriptFile: data.url("panel.js")
});

cm.port.emit("myEvent", "panel is showing");

this panel.js

console.log("entering the panel.js file...");
self.on("click", function(node,data) {
self.port.emit("asd");
});

self.port.on("myEvent", function(data) {
    console.log(data);
});

Ответы [ 2 ]

4 голосов
/ 13 декабря 2011

Цитировать документацию :

Объекты панели и работника страницы напрямую интегрируют рабочий API. Поэтому для получения событий из скрипта контента, связанного с панелью, вы используете panel.port.on ()

То, что вы используете, это не panel или page-worker, а context-menu. А пакет context-menu не позволяет двунаправленную связь со скриптом контента. Опять же, если вы посмотрите на документацию : вы можете только получать сообщения, отправленные сценарием содержимого, но не отправлять ему сообщения. Вместо этого сообщения context и click автоматически отправляются в сценарий содержимого в соответствующих ситуациях.

0 голосов
/ 10 января 2016

См .: https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Content_Scripts/using_postMessage

В качестве альтернативы порту, контентные модули поддерживают встроенное событие сообщения. В большинстве случаев порт предпочтительнее событий сообщений. Однако модуль контекстного меню не поддерживает порт, поэтому для отправки сообщений из сценария содержимого в надстройку через объект контекстного меню необходимо использовать события сообщений.

...