我正在为Firefox OS的主屏幕创建一个小部件。我在B2G中将小部件分离为另一个应用程序,在主屏幕中,我将小部件的内容加载到iframe中。因为它来自不同的域,所以我修改了域以使它们相等,但当我注册事件处理程序时,它仍然不起作用:
(小部件是iframe对象,foo是我的函数。)widget.contentWindow.oncontextmenu = foo;
仍未调用我的处理程序来响应“contextmenu”事件。
然而,当我把widget模块放在homescreen模块中,并让它们成为一个web应用程序时,它就能正常工作。
发布于 2012-11-13 21:58:20
contentWindow不支持跨域访问。不同的应用程序有不同的起源。
如果您在homescreen应用程序中添加了mozbrowser iframe,则可以从该iframe中的URL加载您的小部件,并侦听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的示例,请参阅浏览器应用程序
这将需要添加“浏览器”权限到homescreen应用程序。
如果你想将它作为一个应用程序加载,那么你也需要在iframe上使用mozapp属性,并且需要指向该应用程序的清单。这就是系统应用程序中的窗口管理器如何将应用程序嵌入到iframe中。
https://stackoverflow.com/questions/13192098
复制相似问题