Guten Morgen
Folgenden Code:
user_pref("capability.policy.default.Window.open", "noAccess");
möchte ich in einem Greasemonkey-Script verwenden.
Als user.js funktionierts, als GM-Script noch nicht, was muss geändert werden?
Guten Morgen
Folgenden Code:
user_pref("capability.policy.default.Window.open", "noAccess");
möchte ich in einem Greasemonkey-Script verwenden.
Als user.js funktionierts, als GM-Script noch nicht, was muss geändert werden?
Hallo,
was genau bezweckst du damit? Möchtest du diesen about:config Eintrag nur auf bestimmten Seiten und temporär per Greasemonkey ändern? Oder Greasemonkey diese Einstellung, da fürs Skript notwendig, vornehmen lassen, sodass z.B. andere Leute das nicht selbst machen müssen?
1. Ich weiß nicht, ob das mit Greasemonkey geht. Kann sein, dass man mit Greasemonkey auf bestimmte lokale Einstellungen keinen Zugriff hat. Bei lokalen Dateien ist das wohl so (also die user.js selbst könnte man daher sicher nicht bearbeiten), im Fall von about:config kann ich das aber nicht genau sagen. Außerdem könnten sich je nach Anwendungsfall bestimmte praktische Probleme daraus ergeben, z.B. wenn die Einstellung nach Verlassen der Seite wieder zurückgestellt werden oder in parallelen Tabs nicht aktiv sein soll (about:config Werte sind global). Aber das mag hier zweitrangig sein. Wie auch immer, falls es geht, würde mich das auch interessieren, ich habe aber auch nicht weiter dazu recherchiert.
2. Für die Erweiterung Custom Buttons (CB Forum) kann ich dir einen Code anbieten, mit dem sich ein about:config Wert per Buttonklick manuell umschalten lässt (in diesem Fall dom.storage.enabled;false/true -> Linksklick auf Button = Toggle (Hin- und Herschalten) zwischen true und false, Mittelklick = Toggle plus Seitenreload):
/*Initialization Code*/
var Boolean_False_img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABDUlEQVQ4jaXTQU4CQRAF0Be4DGuOxE40umH2hoOwZKbbA7BQL8IVOMBAIsGFBfSMCBp/0pmemfq/un5V08OSUWKeWSU2iU3s50tG/fgTMsNMlWgz68SiYdowTSziW5upnhlcIr9ltonZtwA8M0jMMrvEa2ZYClSZbcP4xyN+xd1ldrGqsuY2MbtGfmGa+aiZJGaJdslIGLa+dOwjau4T+5rJsZzwZC4cXkTsIVa5PyT25TuEsSuJTcO0IJ3ImQccInNHILqzuSpQZO7/OwtcKqHmsZ+x/yxL6JiYeSoNu4SOiWUbf0OO7Oc2RtYqJqy9RW4YZ7anQQqBYeY9RG6N8jbGftgJ+NdlKvHX6/wJxBq5kjPaXwkAAAAASUVORK5CYII=";
var Boolean_True_img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAyklEQVQ4jaWTsQ2DQAxFn2AZanZhCWpo8ReDsAZFyCKswADQJQUOkHAoIViydCfb72yfDZ8iEkSN0WIMri2iRiQ7/0UyYipKjBHRIxpE7togeoyRihIR7YNFh5gQxd4BEJHbJowbGfFqnKkTIj1OcQGliImKcq15Trv4GrxCCo9J8Ob0wbSPAZHH1HiHGzc9XLfn8F00GC0YAyLfOIVAIUCOMZwFEAKcKWEL8BIuN/HyN8LFQYJ5lI37z6MsuvdRfkH+Xqb3l06t8xMmZI7HBuVvEwAAAABJRU5ErkJggg==";
var preF = 'dom.storage.enabled';
var on = false;
var off = true;
this.pref = preF;
this.setState = function(){
var state = this.PS.getBoolPref(this.pref);
if (state == off) {
this.checkedval = false;
this.image = Boolean_True_img;
this.tooltipText = "dom.storage.enabled;true\nL: toggle | M: toggle+reload page";
} else {
this.checkedval = true;
this.image = Boolean_False_img;
this.tooltipText = "dom.storage.enabled;false\nL: toggle | M: toggle+reload page";
}
}
// TOGGLE FUNCTION FOR CHECK/UNCHECK
this.leftclick = function(evt){
var prefValue = custombuttons.getPrefs(preF);
if (prefValue == on) {
custombuttons.setPrefs(preF,off);
this.checkedval = false;
this.image = Boolean_True_img;
this.tooltipText = "dom.storage.enabled;true\nL: toggle | M: toggle+reload page";
}
else {
custombuttons.setPrefs(preF,on);
this.checkedval = true;
this.image = Boolean_False_img;
this.tooltipText = "dom.storage.enabled;false\nL: toggle | M: toggle+reload page";
}
}
this.midclick = function(evt){
var prefValue = custombuttons.getPrefs(preF);
if (prefValue == on) {
custombuttons.setPrefs(preF,off);
BrowserCharsetReload();
this.checkedval = false;
this.image = Boolean_True_img;
this.tooltipText = "dom.storage.enabled;true\nL: toggle | M: toggle+reload page";
}
else {
custombuttons.setPrefs(preF,on);
BrowserCharsetReload();
this.checkedval = true;
this.image = Boolean_False_img;
this.tooltipText = "dom.storage.enabled;false\nL: toggle | M: toggle+reload page";
}
}
this.setAttribute('onclick', 'gQuot( event, this )'); // Calls the Global MouseClick handler gQuot
// OBSERVES STATE OF PREFERENCE
this.PS = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);
this.ob = {};
this.ob.observe = this.setState.bind(this);
this.PS.addObserver(this.pref,this.ob,false);
this.setState();
this.setAttribute('preference',preF);
Alles anzeigen
3. Mit einem Skript für die Erweiterung userChromeJS könnte es wohl auch gehen. Wir haben dazu einen extra Thread hier im Forum mit vielen tollen Skripten. Die Skripte aus dem Thread sind auch hier nochmal separat gelistet. Es sind auch welche dabei, die eigene about:config Einträge anlegen, aber leider weiß ich nicht mehr welche. Im Zweifel müsste man sich da etwas durch die Liste graben oder im Thread um Hilfe bitten. Inwiefern sich weiterer Greasmonkey Code in einem userChromeJS Skript verwenden ließe, müsste man im speziellen Fall sehen.
Viel Erfolg
Der Grund ist folgender:
Auf der Seite http://mov-world.net/news wird beim Anklicken "Alle anzeigen" ein neuer Tab mit einer anderen Website geöffnet. Dies kann durch obigen Code in der user.js verhindert werden.
Da ich bis jetzt ohne user.js auskomme, jedoch Greasemonkey einsetze, dachte ich mir, schnapp den Code, begrenze die Gültigkeit auf mov-world und gut ist.
Eine zusätzliche Erweiterung möchte ich nicht, wenn es partout nicht anders geht, nehme ich die user.js. Nachteil könnte vielleicht sein, dass dann andere Seiten gewünschte Tabs nicht öffnen.
Versuche es damit, der neue Tab wird damit nur mov-world.net verboten:
user_pref("capability.policy.policynames", "strict");
user_pref("capability.policy.strict.sites", "http://mov-world.net");
user_pref("capability.policy.strict.Window.open", "noAccess");
Ein GM-Skript kann nur auf bestimmte about:config-Einträge zugreifen; die Namen müssen einem bestimmten Schema entsprichen.
Genauer hier: http://wiki.greasespot.net/GM_setValue
Die Idee dahinter ist, daß ein Skript nur auf seine eigenen about:config-Einträge Zugriff hat, nicht auf die anderer Skripte und auch auf sonst keine.
Hallo aborix
Klappt, danke.
In der zweiten Code-Zeile steht sites, kann ich noch eine weitere Website einfügen und wenn ja, wie?
Folgendes habe ich noch beobachtet:
1.) user.js-Daten werden in die prefs.js geschrieben, beim Leeren oder Löschen der user.js bleiben die Daten in der prefs.js erhalten.
Kann die prefs.js den Eintrag nicht löschen, weil sie nicht weiss, dass sie ursprünglich von der user.js kam, die jetzt leer bzw. gelöscht ist?
2.) Der Code steht in der prefs.js, jedoch nicht unter about:config. Warum?
Zitat von wegelagererIn der zweiten Code-Zeile steht sites, kann ich noch eine weitere Website einfügen und wenn ja, wie?
in der zweiten Zeile die Sites nebeneinander, mit einem Leerzeichen dazwischen, auflisten:
user_pref("capability.policy.strict.sites", "http://www.bösesite1.de http://www.bösesite2.com http://www.bösesite3.org");
Mehr dazu steht hier:
http://kb.mozillazine.org/Security_Policies
http://www-archive.mozilla.org/projects/secur…nfigPolicy.html
1. und 2. habe ich auch beobachtet, den Grund dafür weiß ich nicht.
Vielleicht sollen derartige Einträge verborgen bleiben?
Ich habe sie nur bei geschlossenem Fx durch Löschen in der prefs.js entfernen können.
Zitat von wegelagerer1.) user.js-Daten werden in die prefs.js geschrieben, beim Leeren oder Löschen der user.js bleiben die Daten in der prefs.js erhalten.
Ich hätte gedacht, dass das erstmal normal ist. Wenn man einen vorhandenen Eintrag in about:config manuell verändert, bleibt der auch so. Gibt es eine Einstellung dazu in der user.js, wird diese bei Firefoxstart entsprechend geprüft und ggf. geändert. Wenn ich z.B. dom.storage.enabled in der user.js als false definiert habe und ich stelle zwischenzeitlich manuell auf true, wird dieser Eintrag wegen der user.js bei Browserstart automatisch auf false zurückgesetzt. Lösche ich dann die user.js bleibt der Wert auf true, weil es ja nichts gibt, was Firefox sagt, wie er anders einzustellen sei. Es ist eine getätigte Einstellung, ob diese nun manuell oder automatisiert durch user.js vorgenommen wurde, spielt in diesem Fall keine Rolle.
Warum etwas jedoch in der pref.js auftauchen kann, unter about:config jedoch nicht, weiß ich nicht. Vielleicht handelt es sich um eine Art Bug, wenn man neue Einträge unter about:config nicht explizit mittels "Neu >" anlegt.
Viele Grüße
Zitat von wegelagerer1.) user.js-Daten werden in die prefs.js geschrieben, beim Leeren oder Löschen der user.js bleiben die Daten in der prefs.js erhalten.
Nach einigem Nachdenken halte ich das auch für normal.
Zum Nicht-Aufscheinen in about:config habe ich inzwischen diesen Bugreport gefunden, es ist also beabsichtigt:
Bug 284673 - about:config hides capability.policy preferences
Danke aborix
Ich habe die config.js mal von den angesprochenen Zeilen befreit (im Fx17 enden beide mit return) und tatsächlich tauchen die capability-Einträge in der about:config auf.
Mehreren URLs neue Tabs verbieten klappt auch.
Danke an Euch beide für die Hilfe.
Wie immer gern geschehen.