Ich entwickle eine FireFox-Erweiterung mit JPM-Addon. Ich lade ein Panel von den wichtigsten index.js wie so Datei ...FF Addon (JPM) Pass Nachricht von Panel-Skript zu Hauptindex-Skript
var panel = require('sdk/panel');
var panel = panel.Panel({
contentURL: url('pages/popup.html'),
onHide: doHide
});
//and in another place...
panel.show({
position: button
});
Die Seiten/popup.html Datei verweist auf eine JavaScript-Datei, und ich verwende den relativen Pfad zu laden. Ich muss herausfinden, wie man eine Nachricht von dieser Javascript-Datei, geladen von der Panel-Webseite, an die Hauptindex.js-Skriptdatei des Addons weitergibt.
I postmessage sowie port.emit versucht ...
Also, entweder
//index.js
panel = require("sdk/panel").Panel({
onMessage: function(message) {
console.log(message);
}
});
//popup.js - panel file
panel.postMessage('something');
... oder ...
//index.js
panel.on("message", function(text) {
console.log(text);
});
//popup.js
self.port.emit('message', 'hello world');
jedoch diese beiden don Es scheint nicht zu funktionieren. Hilfe!
Kann man auch eine Funktion aus dem Addon-Skript aufrufen? In Wirklichkeit portiere ich eine Chrome-Erweiterung und kann den Rückruf nicht für das verwenden, was ich brauche. –
@ShahidThaika, Nachrichtenübergabe ist asynchron (möglicherweise von einem Prozess zum anderen). Dies gilt auch für Chrome. Wenn Sie eine synchrone Funktion zum Senden einer Nachricht aus dem Add-On-Skript meinen, dann ja. Für den obigen Code wäre das 'panel.port.emit (nameOfMessage, message);'. BTW: Wenn Sie eine Chrome-Erweiterung portieren und dies noch nicht getan haben, sollten Sie sich die [WebExtensions] (https://developer.mozilla.org/en-US/Add-ons/WebExtensions) ansehen. API, die Chrome-Erweiterungen sehr ähnlich ist. – Makyen
Ich habe eine Funktion im Panel verwendet, um eine Zeichenfolge basierend auf der Lokalisierung des Browsers zurückzugeben. In FF scheint es jedoch notwendig zu sein, require ('sdk/l10n'). Get, auf das nur über die Datei index.js zugegriffen werden kann. Ich muss herausfinden, wie ich die Lokalisierungsfunktion aufrufen soll. –