你有一个像这样的 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";
在 Chrome 和 Firefox 中的工作方式相同。
这是 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/