我正在为Firefox OS的主屏幕创建一个小部件。我已将小部件与B2G中的另一个应用程序分开,在主屏幕中,我将小部件的内容加载到iframe中。由于它来自不同的域,我修改域以使它们相等,但是当我注册事件处理程序时,它仍然无法工作:
(widget是iframe对象,foo是我的函数。) widget.contentWindow.oncontextmenu = foo;
我的处理程序仍然没有被调用以响应' contextmenu'事件
但是,当我将小部件模块放在主屏幕模块中并让它们成为一个Web应用程序时,它可以正常工作。
答案 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中的方式。