Javascript 为什么iframe可以更改父窗口';来自不同域的URL?

Javascript 为什么iframe可以更改父窗口';来自不同域的URL?,javascript,html,dom,iframe,same-origin-policy,Javascript,Html,Dom,Iframe,Same Origin Policy,我有两个领域: sub1.domain.org包含一个iframe,其src指向另一个:sub2.domain.org 关于第2款: //triggers a cross-domain security error alert(window.parent.location.href); //executes just fine on FF, IE, Chrome, and Safari. window.parent.location.href = new_url; 因此,看起来我被允许写入

我有两个领域:

sub1.domain.org包含一个iframe,其src指向另一个:sub2.domain.org

关于第2款:

//triggers a cross-domain security error
alert(window.parent.location.href);

//executes just fine on FF, IE, Chrome, and Safari.
window.parent.location.href = new_url; 
因此,看起来我被允许写入父窗口的URL,但我不被允许读取它。这真的是标准吗?我只想知道为什么会这样

我在这里找到了一个答案:

同样的原产地政策在这里也不适用。通过更改url 在浏览器窗口的地址栏中,您正在更改 window.top.location.href属性。如果有相同的起源 如果有限制,互联网就会死掉。你不是在发邮件吗 请求到另一个位置,您无法从 第三方资源并将其加载到您的页面中,您正在重定向 将浏览器移动到另一个位置,关闭并清除DOM

但这个答案引发了其他后续问题

当我们更改父级的URL时,我们是否仍然在技术上修改父级的DOM(即使它关闭了它),从而违反了同源策略

如果在这里实行同一起源政策,互联网究竟会如何消亡?当然,我们可以区分在地址栏中手动输入URL和在不同域上通过脚本更改URL


我知道这起案件并没有违反同一原产地政策,但我仍然很难理解到底是什么原因。有人能进一步解释为什么允许这样做吗?

iframe更改父窗口的URL不是安全问题。它只是将一个新页面加载到父窗口中(从而终止原始父窗口中包含的iframe)。那里没有安全问题

来自不同来源的iframe(正如您所注意到的)不允许访问父级的内容,因为这可能是一个安全问题

仅供参考,反之亦然。父框架可以创建iframe并将其
.src
设置为它想要的任何内容,包括其他域,但不能访问加载的内容。这里的核心问题是,显示来自其他域的内容不是安全问题,但从不同来源访问实际内容可能是安全问题。所以,你通常可以显示你想要的任何东西,只是不能访问它


仅供参考,通过重置父窗口源URL来检测您是否正在被帧框和“弹出”帧的能力称为“帧破坏”,内容提供商有权决定它们是否可以被帧框,或者由谁来帧框。现在有了新的控件来指定站点是否可以框架化,因此在新的浏览器中不需要框架分解。

请原谅,我是一个白痴,移动时间太长了,但是如果域是相同的(上面的示例中的domain.org),是否真的会考虑跨站点脚本编写?我的意思是,我意识到子域只是简单地映射到IP地址,但所有权不能分割。谁拥有sub1.domain.org,谁也100%拥有sub2.domain.org?我同意你关于无法阅读的报告似乎很愚蠢,在这种情况下,我建议阅读错误是一个假阴性,应该改变。也许我对出售子域的合法性不正确。你可以访问iframe的内容。var$iframe=$(“#iframeID”).contents()$iframe.find('selector')@OGSean-仅当同一域。