Боковая панель Firefox, вызывающая функции javascript в главном окне браузера - PullRequest
1 голос
/ 03 июня 2011

Я пытаюсь собрать быструю боковую панель Firefox только для внутреннего использования.

Я немного пытаюсь понять, как взаимодействуют боковая панель и главное окно браузера.Что я хочу сделать, так это вызвать существующие функции JavaScript, которые находятся только в главном окне браузера.

Мой код выглядит так:

ff-sidebar.xul

<checkbox label="Button hover" checked="false" oncommand="add_enhance(this)"/>

ff-sidebar.js

function add_enhance(cb){
    if (cb.checked) {
        // this bit is wrong I know
        window.content.document.NEWSTYLE.buttonHover();
    }
}

Итак, вопрос в том, как мне вызвать функцию с именем NEWSTYLE.buttonHover(), которая живет в главном окне?

1 Ответ

1 голос
/ 06 июня 2011

Теоретически это должно работать:

window.content.NEWSTYLE.buttonHover();

window.content указывает на окно содержимого браузера, и в этом окне определяется переменная NEWSTYLE. На самом деле все немного запутанно из-за механизмов безопасности - привилегированный код не может напрямую обращаться к объектам непривилегированного кода. Вместо этого вы получаете доступ к ним через XPCNativeWrapper (см. https://developer.mozilla.org/en/XPCNativeWrapper). Технические детали несколько изменились в Firefox 4, но по сути они все те же.

Самый простой способ сделать то, что вы хотите, не вызывая проблем с безопасностью, - это изменить расположение окна контента на URL-адрес javascript: URL. Как это:

window.content.location.href = "javascript:void NEWSTYLE.buttonHover()";

Вы не сможете получить результат этой функции, но, похоже, она вам не нужна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...