在XUL组件之间发送数据

时间:2010-10-31 07:17:53

标签: javascript firefox scope firefox-addon xul

我有一个由浏览器覆盖(ff-overlay.xul)组成的扩展,它通过此代码(来自mozilla扩展生成器)启动侧栏(ff-sidebar.xul): (在ff-overlay.xul中)

<menupopup id="viewSidebarMenu">
    <menuitem key="key_openSidebar_testinstallPackage" observes="viewSidebar_testinstallPackage" />
</menupopup>

<keyset id="mainKeyset">
    <key id="key_openSidebar_testinstallPackage" command="viewSidebar_testinstallPackage" />
</keyset>

<broadcasterset id="mainBroadcasterSet">
    <broadcaster id="viewSidebar_testinstallPackage"
        label="&testinstallPackageSidebar.label;"
        autoCheck="false"
        type="checkbox"
        group="sidebar"
        sidebarurl="chrome://testinstallPackage/content/ff-sidebar.xul"
        sidebartitle="&testinstallPackageSidebar.label;"
        oncommand="toggleSidebar('viewSidebar_testinstallPackage');" />
</broadcasterset>

主叠加层在overlay.js中有js代码: (在ff-overlay.xul中)

<script src="overlay.js"/>

侧边栏xul在ff-sidebar.js中有js代码: (在ff-sidebar.xul中)

<script src="ff-sidebar.js"/>

我需要从overlay.js向ff-sidebar.js发送一些数据(一个String就够了)

我已经尝试了this但它没有用(我不知道它是否可行,它应该在主叠加层和当前页面之间)。

请告诉我一些意思。

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

在您的情况下使用nsIWindowMediator是不合适的。如果你需要将一些数据从overlay.js传递到ff-sidebar.js,请使用window.QueryInterface,如下所示:

overlay.js中

var shell = {
message : function(){
       var msg = "Hello";
       return msg;
}
}


FF-SIDEBAR.JS

// put this in the function that is executed when the sidebar loads preferably 
var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
               .getInterface(Components.interfaces.nsIWebNavigation)
               .QueryInterface(Components.interfaces.nsIDocShellTreeItem)
               .rootTreeItem
               .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
               .getInterface(Components.interfaces.nsIDOMWindow);
alert(mainWindow.shell.message); //this will alert Hello

您可能会注意到叠加的对象在另一个范围内可用。