Mozilla-Preferences abfragen
Thomas Meinike
- javascript
0 Cyx230 Thomas Meinike0 Cyx23
0 Jan L.0 MudGuard0 Jan L.0 Thomas Meinike
0 Avalon
Hallo,
der Hintergrund meiner Frage ist die native Vefuegbarkeit von SVG im kuenftigen Firefox 1.5. Bereits seit Deer Park Alpha 1 ueber Alpha 2 bis zur aktuellen Version Firefox 1.5 Beta 1 ist SVG aktiviert (laenger schon in den Mozilla-Nightly-Builds).
Ein Blick ueber "about:config" zeigt die Voreinstellung "svg.enabled" mit zugehoerigem Wert true.
Da ich gerade allerlei Techniken des Mozilla-XML-DOM im SVG-Kontext ausprobiere -- was durchaus passabel funktioniert -- waere auch eine vorherige Abfrage des nativen SVG-Renderers hilfreich (die DOM-Methoden funktionieren zwar auf Mozilla-Level und werden auch separat auf Existenz geprueft, aber die Ergebnisse sollen letztlich in den SVG-DOM-Baum wandern).
Firefox bringt eine JS-Bibliothek prefcalls.js mit, die Funktionen fuer Zugriffe auf Voreinstellungen enthaelt. Darueber und mit weiteren Mozilla-Dev-Tutorials bin ich zu diesem Abfragecode gelangt:
var prefs,svgen;
// 1. Variante:
prefs=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(null);
svgen=prefs.getBoolPref("svg.enabled");
alert(svgen); // undefined
// 2. Variante:
prefs=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("svg");
svgen=prefs.getBoolPref("enabled");
alert(svgen); // undefined
Beide bringen nur undefined, aber immerhin keine Fehler in der JS-Konsole.
Frage: Hat jemand solche Abfragen bereits erfolgreich praktiziert?
Eine (vermutlich brauchbarere) Alternative habe ich mir ausgehend von der erfolgreichen Abfrage des MIME-Types image/svg+xml bei gleichzeitiger Abwesenheit eines zugehoerigen Plug-ins ueberlegt:
if(window.ChromeWindow && navigator.mimeTypes &&
navigator.mimeTypes["image/svg+xml"] &&
!navigator.mimeTypes["image/svg+xml"].enabledPlugin)
{
// Code fuer SVG-enabled Mozilla ...
}
else ...
Damit wird unter Firefox 1.0x (mit/ohne Plug-in) und Nicht-Mozilla-Browsern der else-Zweig erreicht und FF 1.5b und Co. werden bedient. Dennoch wuerde mich mal die Sache mit den Preferences interessieren, weil "svg.enabled" --> true genau die gesuchte Information darstellt.
MfG, Thomas
Hallo,
Damit wird unter Firefox 1.0x (mit/ohne Plug-in) und Nicht-Mozilla-Browsern der else-Zweig erreicht und FF 1.5b und Co. werden bedient. Dennoch wuerde mich mal die Sache mit den Preferences interessieren, weil "svg.enabled" --> true genau die gesuchte Information darstellt.
Kann hier nicht statt "if(window.ChromeWindow && " erstmal nach "window.XML", vgl. auch Browsererkennung durch JavaScript, gefragt werden?
Grüsse
Cyx23
Hallo,
Kann hier nicht statt "if(window.ChromeWindow && " erstmal nach "window.XML", vgl. auch Browsererkennung durch JavaScript, gefragt werden?
Danke fuer den Hinweis. Waere fuer eine Pruefung ab FF 1.5 sinnvoll.
Kennen die bisherigen SVG-enabled "Nightly-Builds" dieses Objekt auch (habe gerade keinen solchen Mozilla installiert)? Immerhin gab es solche Builds bereits lange vor FF 1.0. Insofern ist window.ChromeWindow vielleicht besser geeignet.
BTW: Deine Tabelle ist sehr hilfreich. Noch praktikabler waere es, wenn die Browser-Legende nochmals am unteren Ende auftaucht.
MfG, Thomas
Hallo,
BTW: Deine Tabelle ist sehr hilfreich. Noch praktikabler waere es, wenn die Browser-Legende nochmals am unteren Ende auftaucht.
Schon erledigt:-) Der Bedarf ist klar, ich hatte deswegen auch schon öfters position:fixed
versucht, aber je nach Browser und Fenstergrösse wäre das beim derzeitigen Aufbau noch etwas
gewagt.
Mit einem (noch undokumentierten) Doppelklick auf die obere Browser-Legende gibt es aber
jetzt auch erstmal eine einfache Variante mit fixed, vielleicht kann ich das später nochmal
etwas eleganter umsetzen.
Grüsse
Cyx23
Hallo,
Also
const prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("");
svgen = prefService.getBoolPref("svg.enabled");
alert(svgen);
gibt bei mir (FF 1.5 beta1 WinXP) 'true' aus (auf der JS-Konsole ausgeführt).
Gruß, Jan
Hi,
// 1. Variante:
prefs=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(null);
svgen=prefs.getBoolPref("svg.enabled");
alert(svgen); // undefined// 2. Variante:
prefs=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("svg");
svgen=prefs.getBoolPref("enabled");
alert(svgen); // undefined[/code]Beide bringen nur undefined, aber immerhin keine Fehler in der JS-Konsole.
In welchem Kontext ausgeführt?
Ich vermute, daß die nur im Chrome-Kontext (also in browserinternem Code - Extensions, Plugins, ...) funktionieren, im Kontext einer HTML-Seite aber nicht funktionieren.
Wäre ja auch schlimm, wenn in jeder HTML-Seite die Abfrage sämtlicher Browser-Einstellungen möglich wäre, denn die könnten dann ja auch an einen Server übermittelt werden.
cu,
Andreas
Hallo,
Ich vermute, daß die nur im Chrome-Kontext (also in browserinternem Code - Extensions, Plugins, ...) funktionieren, im Kontext einer HTML-Seite aber nicht funktionieren.
So ist es. Ich bin davon ausgegangen, daß das klar ist.
Gruß, Jan
Hallo,
In welchem Kontext ausgeführt?
Im Browser-Kontext (http bzw. file).
Ich vermute, daß die nur im Chrome-Kontext (also in browserinternem Code - Extensions, Plugins, ...) funktionieren, im Kontext einer HTML-Seite aber nicht funktionieren.
Das wird es sein. In der JS-Konsole funktioniert meine erste Variante mit getBranch(null) und getBranch("").
Ansonsten erhalte ich jetzt die erklaerende Meldung "Error: uncaught exception: Permission denied to get property UnnamedClass.classes".
Wäre ja auch schlimm, wenn in jeder HTML-Seite die Abfrage sämtlicher Browser-Einstellungen möglich wäre, denn die könnten dann ja auch an einen Server übermittelt werden.
Ja, so ganz wohl war mir bei der Idee auch nicht ;-).
Mir bleibt ja noch die genannte Alternative. Danke nochmal, auch an Jan und Kristof.
MfG, Thomas
Hallo,
Vieleicht hilft Dir dies weiter:
http://www.faqts.com/knowledge_base/view.phtml/aid/1608/fid/125
Gruß
Avalon
Hallo,
Vieleicht hilft Dir dies weiter:
http://www.faqts.com/knowledge_base/view.phtml/aid/1608/fid/125
Danke -- das funktioniert mit navigator.preference("svg.enabled");
durchaus via file nach Sicherheitsabfrage, aber bereits via http://localhost/... wird der Zugriff (sinnvollerweise) mit Exception verwehrt.
MfG, Thomas