XUL:如何允许从浏览器脚本访问顶层窗口(当src是localhost时)

时间:2014-08-07 11:20:13

标签: javascript xul

XUL:

<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <browser type="chrome" disablesecurity="true" src="http://localhost:60000/test.html" flex="1" disablehistory="true" />
</window>

的test.html:

<script>
    window.parent.document.title = "abc";
</script>

jsconsole中的错误:Permission denied to access property 'document'

如果我将"http://localhost:60000/test.html"更改为"chrome://test.html",那么一切正常,但在我的情况下,我可以访问网络服务器。

1 个答案:

答案 0 :(得分:0)

出于安全考虑,你无法按照自己的方式做到你想做的事。

从非chrome://地址或其他Firefox扩展程序特定协议(例如resource://)加载的页面在所有普通网页(非特权)的安全上下文中运行。这明确阻止的一件事是访问当前页面之外的Firefox区域。因此,您尝试访问当前浏览器的父级window应始终失败。

在浏览器的URL栏中使用chrome://test.html地址明确指示Firefox在可以访问大多数Firefox的扩展程序的更高安全性上下文(特权)中加载页面

如果您需要从非特权文档访问chrome://资源,则可以使用自定义DOM事件实现消息传递。但是,在特权方面,您必须先在Firefox配置文件中安装Firefox扩展,然后才能执行此操作。换句话说,用户必须通过安装扩展程序或至少从chrome://地址访问某些内容来授予对特权级别的访问权限。这些地址仅可从用户本地文件存储器中的非常有限数量的文件夹中获得。

如果您想了解更多信息,可以在Interaction between privileged and non-privileged pages的MDN上找到一个页面。