在 iframe 中指定全局变量名称时,表单目标会中断
Form target breaks when global variable name is specified inside iframe
你有这样的HTML
:
<form action="frame.html" target="frame1"><input type="submit"></form>
<iframe name="frame1" id="frame1" src="frame.html"></iframe>
它可以很好地重新加载帧(在生产代码的情况下发送一些后期数据)。但是,如果在框架中.html有一个定义全局变量"name"的代码,则代码会中断并在新选项卡中打开框架.html而是。
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
(第一帧是正常工作帧,第二帧打开新窗口,几个控制台.log为清楚起见)。
很奇怪吧?即使 frame.html 在另一个域上,它的工作方式也相同。它不违反同源政策吗?
有没有办法覆盖此行为?我在框架中有一些不受控制的代码(用户生成的代码预览),更改它不是一种选择。它也在另一个域上。
很奇怪吧?
是的。这是非常早期的DOM设计的结果,为了向后兼容而保留了它(因为浏览器不会抛出网站实际上可能仍在使用的任何可怕的东西)。
它不违反同源政策吗?
不。JS没有跨源读取任何内容。
有没有办法覆盖此行为?
没有。您可以通过使用 getElementById
使用 JS 为框架分配一个新src
来绕过它(我不知道链接到框架中的新页面是否会破坏它),或者通过完全销毁框架并用新框架替换它(也使用 JS)。
相关文章:
- 使用javascript将表单提交到iframe目标中
- 通过JavaScript设置表单目标
- 在 iframe 中指定全局变量名称时,表单目标会中断
- HTML 表单目标到顶部框架
- 当表单目标被遮挡时,如何使用 PHP 提交表单
- html表单操作跨域目标iframe
- 表单属性目标是否与asp.net跨页回发相同
- -jQuery 表单插件 - 使用多个目标/数据
- <表单目标=“_blank”>在 iOS 7.0.3 中不起作用
- 当表单以 html 为目标并在 IE11 中操作另一个 html 时,它最终会打开两个页面
- 在没有 JavaScript 的情况下更改表单操作目标
- 跟踪谷歌分析目标中的表单输入
- javascript表单第二次提交到错误的目标
- 使用javascript将表单输入值插入href目标URL
- Firefox试图在按enter键时将表单发送到同一页面,而表单标记中没有定义目标
- 简单的方法使用getElementsByTagName来改变表单目标
- 改变表单目标,重定向现有iframe
- HTML表单目标使用jquery的新窗口
- 根据下拉选择更改表单目标
- 提交后更改表单目标