2016-04-01 2 views
1

Ich bin noch ziemlich neu in der Addon-SDK und habe in einem für mich unerklärlichen Problem gerannt. Bisher habe ich jpm run benutzt, um alles zu testen - und alles funktioniert super. Jetzt bin ich kurz davor, mit dem fertig zu werden, was ich erreichen möchte, also wollte ich es in einem "normalen" Browser testen - hauptsächlich, um es über ein paar Tage zu nutzen, um zu sehen, ob alles wie erwartet funktioniert.Addon hängt Skript gut mit jpm run, aber nicht mit der tatsächlichen xpi

jedoch bereits der Installationsprozess wirft zwei Fehlermeldungen:

[Exception ... "Component Fehlercode zurückgegeben: 0x80004005 (NS_ERROR_FAILURE) [nsIURI.hostPort]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" Lage: "JS Rahmen :: Ressource: //gre/modules/PopupNotifications.jsm :: PopupNotifications_refreshPanel/< :: Linie 667" Daten: no] (unbekannt)

wird zweimal geworfen.

Nun, so weit, so gut (oder schlecht). Der Toggle-Button, den mein Addon hinzufügt, taucht immer noch auf. Ein Klick auf den Button öffnet ein Panel, das eine HTML-Seite enthält - immer noch funktionierend. Die panel.html enthält eine Schaltfläche, und dies ist die Quelle für meine Probleme.

Wenn angeklickt, sendet die Schaltfläche, um eine Nachricht an meine Haupt-Add-on-Datei:

optionsButton.addEventListener("click", function(){ 
    self.port.emit("options-clicked"); 
}); 

auf die index.js hört:

panel.port.on("options-clicked", function() { 

    tabs.open("./privacyProtector/options.html"); 
    panel.hide(); 

    var optionsTab = tabs[tabs.length - 1]; 
    var worker = optionsTab.attach({ 
     contentScriptFile: "./privacyProtector/js/internalOptions.js", 
    }); 

    /* send current settings to options */ 
    worker.port.emit("initialize", createSettingsJSON()); 
}); 

jetzt die options.html Tab geöffnet wird (und das Fenster verschwindet), aber es scheint, als wäre das contentScriptFile nicht angehängt. Ich habe versucht herauszufinden, wo genau der Code funktioniert hat, aber nicht konnte. A 'console.log()' nach

worker.port.emit("initialize", createSettingsJSON()); 

funktioniert gut, aber ein 'console.log()' bei

self.port.on("initialize", function (message) { 
    initialize(message); 
}); 

(die in internalOptions.js ist) erscheint nicht in der Konsole.

Wie auch immer, die Browser-Konsole Berichte:

Verwendung von nsIFile inhaltlich Prozess ist veraltet. NetUtil.jsm: 335: 12

< nicht verfügbar> timers.js: 43

welche Fehler ich keine Ahnung, was mit zu tun, denn all dies ist völlig in Ordnung, mit "jpm run" Arbeits . Daher wäre ich dankbar für jede Hilfe, denn ich habe absolut keine Ahnung, was hier vor sich geht.

Bei Bedarf kann ich auch mehr Code posten, aber ich dachte, dass dieser Beitrag bereits lang genug ist, wie es ist.

Danke!

Bearbeiten: Ich habe den Code zu Github hochgeladen. vielleicht macht es das leichter, mir zu helfen.

https://github.com/Azlond/TrackingProtector

Der zuvor erwähnte Code ist in data/PrivacyProtector/js/panel.js, index.js Linie 66-91, und Daten/PrivacyProtector/js/internalOptions.js

Antwort

3

Well Ich habe es geschafft, dieses Problem zu beheben.

Anstatt das Skript manuell an die geöffnete Registerkarte anzufügen, verwende ich jetzt pagemod, um das Skript anzuhängen, wenn die Optionsseite geöffnet wird.

var pageMod = require("sdk/page-mod"); 
pageMod.PageMod({ 
    include: "resource://protector/data/privacyProtector/options.html", 
    contentScriptFile: "./privacyProtector/js/internalOptions.js", 
    contentScriptWhen: "end", 
    onAttach: sendSettings 
}); 

Auf diese Weise funktioniert die Optionsseite einwandfrei. Ich habe ein neues Problem festgestellt, aber ich werde eine neue Frage stellen, damit dies ein eigenständiges Problem sein kann.

Verwandte Themen