Firefox侧边栏在主浏览器窗口中调用javascript函数

时间:2011-06-03 10:45:45

标签: javascript firefox firefox-addon xul sidebar

我正在尝试整理一个快速的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 个答案:

答案 0 :(得分:1)

理论上,这应该有效:

window.content.NEWSTYLE.buttonHover();

window.content指向浏览器内容窗口,并在此窗口中定义变量NEWSTYLE。实际上,由于安全机制,事情变得更加混乱 - 特权代码无法直接访问非特权代码的对象。相反,您可以通过XPCNativeWrapper访问它们(请参阅https://developer.mozilla.org/en/XPCNativeWrapper)。 Firefox 4中的技术细节有所改变,但基本上它仍然是相同的。

在不引入安全问题的情况下执行所需操作的最简单方法是将内容窗口的位置更改为javascript:URL。像这样:

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

您将无法获得此功能的结果,但看起来并不像您需要它。