表格目标休息的时候里面的iframe
问题描述:
指定全局变量的名字你有一个HTML
这样的:表格目标休息的时候里面的iframe
<form action="frame.html" target="frame1"><input type="submit"></form>
<iframe name="frame1" id="frame1" src="frame.html"></iframe>
,它工作正常重装框架(在生产代码的情况下发送一些后数据)。但如果在frame.html没有定义的全局变量“名称”一码,代码休息和在新标签,而不是打开frame.html。
var name = "a";
工程在铬和火狐以同样的方式。
这里的例子上github.io: http://evigl.github.io/form-target-iframe-test/
来源:https://github.com/EviGL/form-target-iframe-test/tree/gh-pages
(第1张是正常的工作框架,第二次打开新窗口,几个的console.log对清晰度)。
这很奇怪,是吧?即使frame.html位于另一个域上,它的工作方式也是一样。它不是打破同源政策吗?
有没有办法来覆盖这种行为?我在框架中有一些不受控制的代码(用户生成的代码预览),更改它不是一个选项。它也在另一个领域。
答
这很奇怪,是吧?
是的。这是非常早期的DOM设计的后果,它保留了向后兼容性(因为浏览器不会抛出任何可怕的网站实际上仍然可以使用的东西)。
它不是打破同源策略吗?
不是,JS不是阅读所有来源的东西。
有没有办法来覆盖这种行为?
不是。你也许可以通过使用getElementById
为JS分配一个新的src
来解决这个问题(我不知道链接到框架内的新页面是否会破坏),或者通过完全破坏框架并替换它与一个新的(也与JS)。
_No。 JS没有读取任何原始内容。 但是,您可以在某些域上暴露变量“name”的值(同时打开数十万个选项卡)。我想有一种方法可以在JS中确定是否重新加载了框架或打开了新窗口。 重新创建iframe将完成这项工作,我想我会接受答案。 – EviGL
另一个解决方法是,不要使其成为全局的。使其可以通过函数访问。 – SaidbakR
@sємsєм - 问题是“框架内的一些不受控制的代码(用户生成的代码预览),更改它不是一个选项” – Quentin