Ich hatte auch erst "icon"gelassen und getestet. Erst nachdem dies auch nicht ging änderte ich es auch innerhalb von actionbutton.ActionButton. Was ist denn jetzt noch falsch?
Erweiterung media.windows-media-foundation.enabled
-
Zitronella -
23. Mai 2013 um 20:06 -
Erledigt
-
-
Kopier mal bitte nochmal den gesamten Quelltext in die nächste Antwort, wie er jetzt ist. Und schau auch wieder in der Browserkonsole, ob dort ein Fehler auftaucht.
-
Code
Alles anzeigenconst {Cu} = require('chrome'); const _ = require('sdk/l10n').get; const actionbutton = require('sdk/ui/button/action'); const prefs = require('sdk/preferences/service'); const data = require('sdk/self').data; exports.main = function () { if (prefs.get('media.windows-media-foundation.enabled')) { let icon18 = 'enabled-18.png'; let icon32 = 'enabled-32.png'; let icon36 = 'enabled-36.png'; let icon64 = 'enabled-64.png'; } else { let icon18 = 'disabled-18.png'; let icon32 = 'disabled-32.png'; let icon36 = 'disabled-36.png'; let icon64 = 'disabled-64.png'; } actionbutton.ActionButton({ id: 'quickmediacodec', label: _('LABEL_1'), icon : { '18' : data.url(icon18), '32' : data.url(icon32), '36' : data.url(icon36), '64' : data.url(icon64) }, onClick: function() { let appInfo = Cu.import('resource://gre/modules/Services.jsm').Services.appinfo; if(appInfo.OS == 'Linux') { config1 = 'media.gstreamer.enabled'; config2 = 'media.gstreamer.enabled'; } else if(appInfo.OS == 'Darwin') { config1 = 'media.apple.mp3.enabled'; config2 = 'media.apple.mp3.enabled'; } else { config1 = 'media.windows-media-foundation.enabled'; config2 = 'media.directshow.enabled'; } if (false === prefs.get(config1)) { prefs.set(config1, true); prefs.set(config2, true); this.icon: { '18': data.url('enabled-18.png'), } } else { prefs.set(config1, false); prefs.set(config2, false); this.icon: { '18': data.url('disabled-18.png'), } } } // onClick }); // ActionButton }; // main function exports.onUnload = function (reason) { if ('disable' === reason || 'uninstall' === reason) { prefs.reset('media.windows-media-foundation.enabled'); prefs.reset('media.directshow.enabled'); prefs.reset('media.gstreamer.enabled'); prefs.reset('media.apple.mp3.enabled'); } }
[attachment=0]qmc2.png[/attachment] -
Das erste ist erst einmal das hier (2x im onClick-Handler):
Das muss jeweils so heißen:
Es geht um das "=" statt ":". Das Komma am Ende tut nicht weh, aber ich hab's entfernt, weil es für den letzten Eintrag obsolet ist. Du wirst außerdem auch die anderen Icons austauschen wollen und nicht nur eines der vier Icons.
Der nächste Fehler ist Folgendes:
Codeicon : { '18' : data.url(icon18), '32' : data.url(icon32), '36' : data.url(icon36), '64' : data.url(icon64) }
Das hast du von mir genau so bekommen, war aber nicht ganz korrekt. Es müsste so heißen:
Codeicon : { '18' : data.url(this.icon18), '32' : data.url(this.icon32), '36' : data.url(this.icon36), '64' : data.url(this.icon64) }
Probier diese Änderungen mal, das sollte bereits ausreichen, damit das Add-on funktioniert. Und wenn du schon dabei bist:
Codeif (appInfo.OS == 'Linux') { config1 = 'media.gstreamer.enabled'; config2 = 'media.gstreamer.enabled'; } else if (appInfo.OS == 'Darwin') { config1 = 'media.apple.mp3.enabled'; config2 = 'media.apple.mp3.enabled'; } else { config1 = 'media.windows-media-foundation.enabled'; config2 = 'media.directshow.enabled'; }
config1 und config2 wurden nie deklariert, das generiert dir daher eine Warnung, auch wenn es trotzdem funktioniert. Füge also nach
folgende Zeile ein:
Ebenfalls nicht zwingend erforderlich, aber besserer Stil:
Ergänze hier am Ende noch ein Semikolon:
-
Danke. gesagt-getan. Funktioniert aber trotzdem nicht
Code
Alles anzeigenconst {Cu} = require('chrome'); const _ = require('sdk/l10n').get; const actionbutton = require('sdk/ui/button/action'); const prefs = require('sdk/preferences/service'); const data = require('sdk/self').data; exports.main = function () { if (prefs.get('media.windows-media-foundation.enabled')) { let icon18 = 'enabled-18.png'; let icon32 = 'enabled-32.png'; let icon36 = 'enabled-36.png'; let icon64 = 'enabled-64.png'; } else { let icon18 = 'disabled-18.png'; let icon32 = 'disabled-32.png'; let icon36 = 'disabled-36.png'; let icon64 = 'disabled-64.png'; } actionbutton.ActionButton({ id: 'quickmediacodec', label: _('LABEL_1'), icon : { '18' : data.url(this.icon18), '32' : data.url(this.icon32), '36' : data.url(this.icon36), '64' : data.url(this.icon64) }, onClick: function() { let appInfo = Cu.import('resource://gre/modules/Services.jsm').Services.appinfo; let config1, config2; if(appInfo.OS == 'Linux') { config1 = 'media.gstreamer.enabled'; config2 = 'media.gstreamer.enabled'; } else if(appInfo.OS == 'Darwin') { config1 = 'media.apple.mp3.enabled'; config2 = 'media.apple.mp3.enabled'; } else { config1 = 'media.windows-media-foundation.enabled'; config2 = 'media.directshow.enabled'; } if (false === prefs.get(config1)) { prefs.set(config1, true); prefs.set(config2, true); this.icon = { '18': data.url('enabled-18.png'), } } else { prefs.set(config1, false); prefs.set(config2, false); this.icon = { '18': data.url('disabled-18.png'), } } } // onClick }); // ActionButton }; // main function exports.onUnload = function (reason) { if ('disable' === reason || 'uninstall' === reason) { prefs.reset('media.windows-media-foundation.enabled'); prefs.reset('media.directshow.enabled'); prefs.reset('media.gstreamer.enabled'); prefs.reset('media.apple.mp3.enabled'); }; }
-
Also ich hatte die Änderungen bei mir lokal getestet. Es wurde bei mir kein Icon angezeigt, weil ich kein Icon eingebunden hatte, aber ich hatte halt einen leeren Button und bei Klick wurde die Einstellung geändert.
Ich hab mir jetzt nicht den Code aus dem aktuellen Beitrag angesehen, das muss ich heute Abend machen.
-
ich bin gespannt [Blockierte Grafik: http://i.imgur.com/8Dagi93.gif]
-
Klappt doch. Oder was geht nicht?
Das Semikolon in der vorletzten Zeile ist übrigens falsch, das gehört in die letzte Zeile hinter die Klammer. Das ist aber kein Fehler der Art, der etwas an der Funktionsweise verändert.
In meinem Screenshot gehört das grüne Symbol zu deinem Add-on.
-
hm. versteh ich nicht. Ich hab das nochmal gepackt und statt .xpi als .zip hier mal angehängt. Bei mir wird nix angezeigt wenn ich die Erweiterung installiere.
Edit: Semikolon habe ich nun in die letzte Zeile geschrieben. Ich habe mit Firefox 40.0.2 getestet (frisches Profil)
-
Ich hab meinen Beitrag, der an dieser Stelle stand, nochmal gelöscht, hatte deinen Beitrag falsch verstanden. Mein Test war mit Firefox 38. Ich kann momentan nicht auf Firefox 40 aktualisieren, da ich die alte Version noch ein paar Tage für Tests benötige, und produktiv nutz ich ja eh die Nightly-Version. Ich kann das Problem mit deiner Version vom Add-on bestätigen, da ist nichts sichtbar, ich schau mal…
-
Ich sehe in der Datei main.js keinen Unterschied. Wie hast du die XPI-Datei denn erstellt?
-
gemacht. Es ist lediglich die Datei harness-options.json eine andere. Jetzt funktioniert es. ABER... erstmals sieht man bei der Installation nicht gleich das Icon, sondern nur einen weißen Balken. Erst wenn ich drauf klicke wird das Icon angezeigt. Die Funktionalität ist nun vorhanden. Allerdings wenn ich auf "Anpassen" gehe, dann verschwindet wieder das Icon. Ich kann es zwar mit der Maus-Hand "greifen" und verschieben, aber es gibt eben kein Icon. Woran kann das nun wieder liegen?
Edit ich hänge mal die funktionierende xpi als zip hier an.
-
So, ich hab jetzt heute die Schnauze voll gehabt und das ganze Ding komplett neu zusammen gebastelt. Dabei habe ich mir Code von anderen Addons abgeguckt, weil ich bei meinem nicht mehr durch geblickt habe. Ich glaube ich verzichte auf die Übersetzung beim Tooltip (da ich mal wieder nicht weiß wie das geht). Bis jetzt bin ich was Funktionalität und Übersichtlichkeit im Code angeht, zufrieden. Hier ist er.
Code
Alles anzeigenconst prefs = require('sdk/preferences/service'); exports.main = function() { var pref = require("sdk/preferences/service"); var { ActionButton } = require("sdk/ui/button/action") var name = "media.play-stand-alone"; var bool = pref.get(name); var url; var label; if (bool){ url = "./icon64.png"; label = "Quick Media Codec"; } else { url = "./icon64.png"; label = "Quick Media Codec"; }; var button = ActionButton({ id: "toggle-media-codec", label: "Quick Media Codec", icon: url, onClick: function() { bool = pref.get(name); if (bool){ pref.set(name, false); button.icon = "./QMCfalse64.png"; button.label = "Media Codec is stopped"; } else { pref.set(name, true); button.icon = "./QMCtrue64.png"; button.label = "Media Codec is active"; } } }); }; exports.onUnload = function (reason) { if ('disable' === reason || 'uninstall' === reason) { prefs.reset('media.windows-media-foundation.enabled'); prefs.reset('media.directshow.enabled'); prefs.reset('media.gstreamer.enabled'); prefs.reset('media.apple.mp3.enabled'); prefs.reset('media.play-stand-alone'); }; }
Bitte Bescheid geben wenn darin gravierende Fehler oder evtl. später nicht mehr funktionierender Code drin sein sollte, das würde ich dann natürlich versuchen (mit viel Hilfe :mrgreen: ) auszubügeln. DankeDanach muss ich mich "nur noch" um die Signierung kümmern, oder?:x Ich geh mich derweil mal diesbezüglich einlesen [Blockierte Grafik: http://i.imgur.com/ZiwIrme.gif] Edit: sehe gerade, wenn man ich auf AMO hoch lade, brauche ich wohl gar nicht extra signieren :o -
jetzt ist es oben. Aber ich hab noch eine Frage dazu: Ich habe den Code nochmal etwas geändert von
zuCodeexports.onUnload = function (reason) { if ('disable' === reason || 'uninstall' === reason || 'upgrade' === reason) {
Damit wollte ich erreichen dass die alten Einträge wie zb. "media.windows-media-foundation.enabled " wieder zurück gesetzt werden wenn die neue Version geladen wird. Leider scheint das nicht zu klappen. Was ist falsch daran?
-
Damit ich das Gleiche teste wie du, was genau hast du getestet? Hast du dein altes Add-on installiert und dann die neue Version drüber installiert?
-
Alte Version 0.2 von AMO installiert gehabt und da hatte ich media.windows-media-foundation.enabled auf false gestellt. Dann heute per Update in Add-Ons mit der heutigen neuen Version aktualisiert.
Leider stellte sich der Wert nicht auf true um durch die Aktualisierung.Erst durch Deaktivierung und erneute Aktivierung der Erweiterung wurde dann der alte Wert zurück gesetzt.
-
Ach, die neue Version ist schon auf AMO. Das ging ja wirklich schnell. Dann weiß ich leider auch nicht, ob es sich um einen Bug handelt, der Fehler im Add-on liegt (wobei ich nicht wüsste, was man großartig anders machen sollte) oder sonst was.
-
Ja, die Überprüfung auf AMO hat keine 5min gedauert :o
Hier steht was unten von einem Bug: https://developer.mozilla.org/en-US/Add-ons/…load_and_unload allerdings werden bei mir die alten Werte auf Default zurück gesetzt wenn ich mein Addon deaktiviere oder deinstalliere. Nur beim Update klappt es nicht. -
Keine Ahnung, ob dies die Erklärung wäre..
Endor hat einige Erweiterungen übersetzt und diese dann neu signieren lassen. Bei der Installation wird die alte Version aber nicht überschrieben. Es wären somit 2 Versionen installiert... man muss die alte also händisch entfernen, Firefox neustarten, dann die neue installieren, ggf Firefox wieder neustarten, erst dann kommt der neue deutsche Kontext zur Anwendung.
Vielleicht ist das bei deiner Erweiterung ähnlich. Die alte Version entfernen, Fuchs neustarten, die neue Version installieren. Ggf. Fuchs erneut restarten, je nach dem, ob ein Neustart nötig ist... -
Wenn Endor bestehende Add-ons zur Signierung einreicht, muss er hierfür die ID ändern, womit es hinterher de facto unterschiedliche Erweiterungen sind, darum ist dann jeweils eine Deinstallation der alten Version notwendig. In diesem Fall hat Zitronella aber ihr eigenes Add-on aktualisiert, dieses Problem existiert hier also nicht.
-