Seit der Veröffentlichung von Greasemonkey 1.0 haben viele Benutzer Probleme damit, dass ihre Greasemonkey-Skripte nicht ordnungsgemäß ausgeführt werden, wenn sie mit Websites interagieren, die ebenfalls jQuery verwenden . Dieser Konflikt ist auf den neu eingeführten @grant-Code zurückzuführen.
Den Konflikt verstehen:
Nach dem Upgrade auf Greasemonkey 1.0 hat sich der Sandbox-Mechanismus für Greasemonkey-Skripte grundlegend geändert. Der @grant-Code, der es Skripten ermöglicht, bestimmte APIs anzufordern, ist jetzt erforderlich, damit Skripte auf die Umgebung der Seite zugreifen können, einschließlich jQuery. Wenn eine Website jedoch bereits über jQuery verfügt, kommt es aufgrund widersprüchlicher Versionen und Namespaces zu Konflikten.
Behebung des Problems:
Es gab zahlreiche Versuche, diesen Konflikt zu lösen. Eine vorgeschlagene Lösung ist die Verwendung von:
this.$ = this.jQuery = jQuery.noConflict(true);
Dieser Ansatz garantiert jedoch nicht in allen Fällen die Kompatibilität. Eine effektivere Strategie ist die Wiederherstellung der Sandbox.
Wiederherstellung der Sandbox:
Um die Sandbox wiederherzustellen und Konflikte zu entschärfen, bearbeiten Sie den Metadatenblock Ihres Greasemonkey-Skripts und fügen Sie Folgendes hinzu Zeilen:
// @grant GM_addStyle // @grant GM.getValue // ==/UserScript==
Diese @grant-Direktiven spezifizieren APIs, die häufig in Greasemonkey-Skripten verwendet werden. Durch die Einbindung wird die Sandbox wieder aktiviert und Konflikte werden gelöst.
Zusätzliche Hinweise:
Diese Sandbox-Wiederherstellungsmethode stellt die Kompatibilität mit überlegenen Engines wie Tampermonkey und Violentmonkey sicher. Es ist eine stabilere und zuverlässigere Lösung als die Änderung von jQuery-Namespaces.
Das obige ist der detaillierte Inhalt vonWarum funktioniert mein Greasemonkey-Skript nach dem Upgrade auf Version 1.0 nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!