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#clickas 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