我对 Firefox 同源策略的实施感到越来越沮丧。
我正在开发一个支持触摸屏的集成系统,我们让用户选择在屏幕上的几个位置加载 iframe 中的网页。网页可以任何来自任何类型的域和位置的网页(谷歌,雅虎,内联网页面等),这就是我的问题所在。
我需要能够向 iframe 添加 onclick 事件,该事件会给我 iframe 的 ID(或其他唯一标识符)作为响应。这告诉我 iframe 上正在进行活动(网页浏览),并且不应重新加载 iframe(页面设置为固定的自动更新间隔,活动时应中断该间隔)。
我已经阅读了谷歌返回给我的几乎所有内容(但我很乐意在这件事上被推翻)并且我发现这是最好的(在许多其他解决方案中):
<iframe src='http://google.com' id='iframe1' onload='netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite"); this.contentWindow.document.addEventListener("click", function(event) {alert(this.id);}, false)'></iframe>
这只是给我常规权限被拒绝http://本地主机获取属性 Window.document 来自http://google.com
我知道为什么我收到此错误消息,我的问题很简单。我该如何删除它?
它是一个集成系统,我可以从源代码编译 Firefox,我可以根据需要编辑源代码,我可以更改 prefs.js 等。但我需要使用 Firefox(我知道所有其他明智的 Web 浏览器都有一个很好的命令行开关来关闭它...)但我们与 Firefox 平台有一个(相当)紧密的集成,很难删除。
我们目前在 Debian Squeeze 平台上使用 Firefox v.3.5.16(我知道它已经停产,我们打算在其他时间升级它)。如果需要,我可以升级到较新的 Firefox 版本,但从我发现的情况来看,它在这方面的表现似乎更糟。
总结 帮我关闭同源策略,以任何可能的方式在 Firefox 3.5.16 上,作为需要通过跨域 iframe 更改代码的集成平台。
答案1
我觉得自己很蠢。
当你使用时它有效UniversalXP连接而不是UniversalBrowserWrite。
例如:netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
此外,您还可以不是使用 this.id 或 this.parentNode.id,仍然会出现(不同的)访问错误。要解决这个问题,只需先将其存储在临时变量中:
onload='var tempstuff = this.id; this.contentWindow.document.addEventListener("click", function(event) {alert(tempstuff);}, false)'