javascript - 当在 iframe 中指定全局变量名称时,表单目标中断

标签 javascript html iframe

你有一个像这样的 HTML:

<form action="frame.html" target="frame1"><input type="submit"></form>
<iframe name="frame1" id="frame1" src="frame.html"></iframe>

重新加载框架时效果很好(在生产代码的情况下发送一些发布数据)。但是,如果在 frame.html 中有定义全局变量 "name" 的代码,则代码会中断并在 frame.html 中打开 <改为 strong>新标签页。

var name = "a";

ChromeFirefox 中的工作方式相同。

这是 github.io 上的示例: http://evigl.github.io/form-target-iframe-test/
资料来源:https://github.com/EviGL/form-target-iframe-test/tree/gh-pages
(第一帧是正常工作帧,第二帧打开新窗口,为了清楚起见,有几个 console.log)。

很奇怪吧?即使 frame.html 在另一个域中,它的工作方式也是一样的。它不会违反同源策略吗?

有没有办法覆盖这种行为?我在框架内有一些不受控制的代码(用户生成的代码预览),无法更改它。而且它也在另一个域上。

最佳答案

It's strange, huh?

是的。这是非常早期的 DOM 设计的结果,为了向后兼容而保留(因为浏览器不会丢弃网站可能实际上仍在使用的任何可怕内容)。

Doesn't it break Same Origin Policy?

没有。 JS 不会阅读任何跨源的内容。

Is there a way to override this behavior?

不是真的。您可能可以通过使用 getElementById 将新的 src 分配给带有 JS 的框架来绕过它(我不知道是否链接到框架内的新页面会破坏它),或者完全破坏框架并用新框架替换它(也用 JS)。

关于javascript - 当在 iframe 中指定全局变量名称时,表单目标中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36791812/

相关文章:

javascript - 在悬停和移出时切换滚动 DIV 内容

iframe - 谷歌分析 : Tracking certain clicks coming from an Iframe Widget

javascript - 将 iframe 插入 Angular 应用程序

javascript - 按钮保持选中状态,JS 中的 .classList 切换仅每隔一次运行

html - 是否可以在不使用 &lt;style&gt; 或 <link> 标签的情况下导入内联字体

javascript - 在 iframe 中打开另一个网页,优化外观

javascript - 如何版本化和组织路由器 restify

javascript - 比较两个具有相同长度的数组的相同索引

javascript - 为什么告诉 jQuery 单击我的链接按钮会减慢我的页面速度?

javascript - 如何选择DOM中除一个元素之外的所有元素?