表格目标休息的时候里面的iframe

表格目标休息的时候里面的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)。

+0

_No。 JS没有读取任何原始内容。 但是,您可以在某些域上暴露变量“name”的值(同时打开数十万个选项卡)。我想有一种方法可以在JS中确定是否重新加载了框架或打开了新窗口。 重新创建iframe将完成这项工作,我想我会接受答案。 – EviGL

+0

另一个解决方法是,不要使其成为全局的。使其可以通过函数访问。 – SaidbakR

+1

@sємsєм - 问题是“框架内的一些不受控制的代码(用户生成的代码预览),更改它不是一个选项” – Quentin