user.js-Code in Greasemonkey-Script anwenden

  • 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):


    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

    Firefox immer aktuell

  • 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:

    Code
    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 wegelagerer

    In 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:

    Code
    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 wegelagerer

    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.


    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

    Firefox immer aktuell

  • 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.