在不同的B2G / Firefox OS应用程序中注册活动

时间:2012-11-02 08:56:32

标签: javascript firefox web-applications gecko firefox-os

我正在为Firefox OS的主屏幕创建一个小部件。我已将小部件与B2G中的另一个应用程序分开,在主屏幕中,我将小部件的内容加载到iframe中。由于它来自不同的域,我修改域以使它们相等,但是当我注册事件处理程序时,它仍然无法工作:

(widget是iframe对象,foo是我的函数。) widget.contentWindow.oncontextmenu = foo;

我的处理程序仍然没有被调用以响应' contextmenu'事件

但是,当我将小部件模块放在主屏幕模块中并让它们成为一个Web应用程序时,它可以正常工作。

1 个答案:

答案 0 :(得分:3)

contentWindow不可访问跨域。另一个应用程序有不同的来源。

如果您在主屏幕应用中添加了mozbrowser iframe,则可以从该iframe中的网址加载小部件,并在iframe上侦听mozbrowsercontextmenu事件。

<iframe id="widget" mozbrowser=true></iframe>

var widget = document.getElementById('widget');
widget.addEventListener('mozbrowsercontextmenu', eventHandler);

有关如何处理contextmenu事件https://github.com/mozilla-b2g/gaia/blob/master/apps/browser/js/browser.js#L1021

的示例,请参阅浏览器应用

这需要在主屏幕应用中添加“浏览器”权限。

如果您想将其作为应用加载,那么您也需要iframe上的mozapp属性,并且需要指向该应用的清单。这就是系统应用程序中的窗口管理器将应用程序嵌入到iframe中的方式。