Внедрение функций JS на страницу из скрипта Greasemonkey в Chrome

У меня есть скрипт Greasemonkey, который отлично работает в Firefox и Opera. Однако я не могу заставить его работать в Chrome. Проблема заключается в том, что на страницу внедряется функция, которая может вызываться кодом со страницы. Вот что я делаю до сих пор:

Во-первых, я получаю вспомогательную ссылку наunsafeWindow для Firefox. Это позволяет мне иметь один и тот же код для FF и Opera (и Chrome, подумал я).

var uw = (this.unsafeWindow) ? this.unsafeWindow : window;

Затем я добавляю функцию на страницу. Это действительно очень тонкая оболочка, которая ничего не делает, кроме вызова соответствующей функции в контексте моего сценария GM:

uw.setConfigOption = function(newValue) {
    setTimeout(setConfigOption, 0, newValue);
}

Затем в моем скрипте есть соответствующая функция:

setConfigOption = function(newValue) {
    // do something with it, e.g. store in localStorage
}

Наконец, я вставляю HTML-код на страницу со ссылкой для вызова функции.

var p = document.createElement('p');
p.innerHTML = '<a href="javascript:setConfigOption(1)">set config option to 1</a>';
document.getElementById('injection-point').appendChild(p);

Подводя итог: В Firefox, когда пользователь щелкает эту вставленную ссылку, он выполняет вызов функции в unsafeWindow, который затем запускает тайм-аут, который вызывает соответствующую функцию в контексте моего сценария GM, который затем выполняет фактическую обработку. (Поправьте меня, если я здесь не прав.)

В Chrome я просто получаю сообщение об ошибке «Uncaught ReferenceError: setConfigOption не определено». И действительно, ввод «window.setConfigOption» в консоль приводит к «неопределенному». В Firebug и консоли разработчика Opera эта функция есть.

Может быть, есть другой способ сделать это, но некоторые из моих функций вызываются объектом Flash на странице, что, по моему мнению, делает необходимым наличие функций в контексте страницы.

Я бросил быстрый взгляд наальтернативы unsafeWindow на вики Greasemonkey, но все они выглядят довольно уродливо. Я совершенно не на том пути или я должен более внимательно изучить это?

РАЗРЕШАЮЩАЯ СПОСОБНОСТЬ: Я последовал заМакс С. ' совет и теперь он работает как в Firefox, так и в Chrome. Поскольку функции, которые мне нужны были для доступа к странице, должны были вызываться обратно в обычные, я переместил весь свой сценарий на страницу, то есть он полностью обернут в функцию, которую он назвал main ().

Чтобы сделать дополнительное уродство этого хака более терпимым, я мог бы по крайней мере отказаться от использования unsafeWindow и wrappedJSObject.

Мне все еще не удалось получитьбегун содержания из Greasemonkey вики работает. Он должен делать то же самое, и, кажется, он работает нормально, но мои функции никогда не доступны<a> элементы со страницы, например. Я еще не понял, почему это так.

Ответы на вопрос(4)

Ваш ответ на вопрос