gpt4 book ai didi

javascript - Document.domain 和 <iframe>s 破坏了 Internet Explorer 中的 "Back"按钮

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:52:19 26 4
gpt4 key购买 nike

这是一个非常紧迫的问题,我将永远感激任何能提供一些见解的人。

我要将一个小部件(称为“ISM”)部署到第三方站点。该站点使用 document.domain JavaScript 属性来放宽跨域限制(例如,将“a.example.com”和“b.example.com”中的 document.domain 设置为“example.com”,以便它们可以访问每个其他人的 DOM)。

由于我构建用于显示小部件 HTML 内容的 <iframe> 的方式,这会导致我在 Internet Explorer 中的脚本出现问题。在 Internet Explorer 中,在页面上使用 document.domain,然后使用 JavaScript 创建一个 <iframe>,将导致您立即被“锁定”在 <iframe> 之外 - 即,您可以创建它,但它不是在正确的 document.domain,因此由于安全限制,您无法访问其 DOM。这在任何其他浏览器中都不是问题。

要了解我在说什么,请在 IE 中加载此页面:

http://troy.onespot.com/static/3263/stage1.html

您应该会看到一个 JavaScript 错误:“访问被拒绝。”

为了解决这个问题,我将动态创建的 <iframe> 的“src”属性设置为加载托管在同一域(不同子域)中的静态 HTML 文件,并将其 document.domain 属性设置为合适的值:

http://troy.onespot.com/static/3263/stage2.html

这样就解决了安全问题,让我把原本想写的文档写到 <iframe> 中:

http://troy.onespot.com/static/3263/stage3.html

有了该文档,我的小部件就会对我们的服务器进行一些轮询,以获取一些我想插入到另一个 <iframe> 中的 HTML 内容,这将对父页面的访问者可见。我在这里粗略地模拟了这一点(使用静态内容,实际上没有联系我们的服务器):

http://troy.onespot.com/static/3263/stage4.html

问题来了。当我获取该 HTML 内容并将其插入第二个 <iframe> 时,我现在面临一个异常问题,即“后退”按钮损坏。这种情况发生在 Firefox 3.0 和所有版本的 IE(可能是其他浏览器)中,尽管它不会发生在我测试过的某些浏览器(Firefox 3.5、Safari、Chrome)中。查看此页面:

http://troy.onespot.com/static/3263/stage5.html

如果您点击“Google”链接,一切似乎都很好。但是,当导航回上一页(具有后一个测试脚本)时,会引入另一个 JavaScript 错误:“权限被拒绝”。这不会终止脚本,并且似乎没有任何不良影响,除了我认为它与损坏的“后退”按钮功能相关的事实,这是一个非常大的问题 - 我正在拼命尝试解决。我无法调试此错误,因为它的调用堆栈在 jQuery 脚本中开始和停止。

您也可能遇到此错误 - 症状更严重 - 通过转到上面的最后一个链接(stage5.html - 首先清除浏览器缓存)。单击“第 5 阶段(再次)”链接,然后在加载该页面后单击“返回”按钮。

“后退”按钮完全坏了!除了另一个 URL,你不能去任何地方。

这是我需要尽快解决的问题。任何见解或帮助将非常感激不尽!

我不能偏离这个方法太多,所以非常欢迎开箱即用的建议,但由于小部件规范的限制,我可能无法使用它们。我更愿意了解“后退”按钮为何损坏以及如何修复它,以及与 jQuery 相关的“权限被拒绝”错误。

最佳答案

由于存在多个域,因此很难尝试解决此问题。我听说的一件事是 IE 将空白 src 或“about:blank”视为不同的域,但它将“javascript:”“”视为相同的域。您是否尝试过更改第一阶段以将 iframe src 设置为以下内容:

iframe.src = 'javascript:""'

或者:

iframe.src = 'javascript:parent.getFrameHTML()'

关于javascript - Document.domain 和 &lt;iframe&gt;s 破坏了 Internet Explorer 中的 "Back"按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1949749/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com