Wie kann auf `window` (Zielseite) -Objekte zugegriffen werden, wenn @grant-Werte festgelegt sind?
Nehmen wir an, ich arbeite mit der folgenden Webseite:
<html>
<body>
<span id="click">click me</span>
<script>
var hello = function() {
alert('hello');
}
document.getElementById('click').addEventListener('click', function(e) {
hello();
});
</script>
</body>
</html>
und mein Greasemonkey-Skript lautet:
// ==UserScript==
// @name My Script
// @include http://example.com/hello.html
// @version 1
// @grant none
// ==/UserScript==
window.hello = function() {
alert('goodbye');
}
Klicken Sie bei deaktiviertem Greasemonkey-Skript auf das#click
as Element @ auf der Seite zeigt die Warnung 'Hallo' an. Wenn das Skript aktiviert ist, wird beim Klicken auf das Element die Benachrichtigung "Auf Wiedersehen" angezeigt.
Einfach genug. Dashello
-Funktion von der Webseite wird durch die Funktion im Greasemonkey-Skript ersetzt.
Jetzt wollen wir sagen, ich möchte eine Greasemonkey-API verwenden. Wenn ich das @ einstel@grant
value auf einen anderen gültigen Wert als 'none' (z. B.// @grant GM_setClipboard
) [was dazu führt, dass Greasemonkey das Skript als "Inhaltsskript" ausführt, anstatt im Bereich der Seite wie bei "Keine"], funktioniert das Greasemonkey-Skript nicht.
window.hello
zielt nicht mehr auf das richtige Objekt auf der Seite.
Replacingwindow.hello
mitunsafeWindow.hello
sieht so aus, als würde es funktionieren, aber stattdessen wird der folgende Fehler in der JS-Konsole ausgegeben:
Error: Zugriff auf Objekt @ verweige
Wie kann ich das Greasemonkey-Skript umschreiben, während ich @ hab@grant GM_setClipboard
Auf Ziel setzen und das Original ersetzenhello
Funktion auf der Seite?
System Information
Windows 7 64-BitFirefox 32.0Greasemonkey 2.2