Как получить доступ к объектам `window` (целевой странице), когда установлены значения @grant?
Допустим, я работаю со следующей веб-страницей:
<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>
и мой скрипт Greasemonkey:
// ==UserScript==
// @name My Script
// @include http://example.com/hello.html
// @version 1
// @grant none
// ==/UserScript==
window.hello = function() {
alert('goodbye');
}
С отключенным скриптом Greasemonkey, нажав#click
элемент на странице отображает предупреждение «привет». Если скрипт включен, при щелчке на элементе появляется предупреждение «до свидания».
Достаточно просто.hello
функция с веб-страницы заменяется функцией в скрипте Greasemonkey.
Теперь предположим, что я хочу использовать API Greasemonkey. Когда я установил@grant
значение к действительному значению, отличному от 'none' (например,// @grant GM_setClipboard
) [что заставляет Greasemonkey запускать сценарий как «сценарий содержимого», а не в области видимости страницы, как в случае с «none»], сценарий Greasemonkey не работает.
window.hello
больше не нацеливается на правильный объект на странице.
Заменаwindow.hello
сunsafeWindow.hello
похоже, это будет работать, но вместо этого в консоли JS выдается следующая ошибка:
Ошибка: в доступе отказано в доступе к объекту
Как я могу переписать сценарий Greasemonkey, имея@grant GM_setClipboard
установить на цель и заменить оригиналhello
функция на странице?
Системная информация:
Windows 7 64-битнаяFirefox 32.0Greasemonkey 2.2