【发布时间】:2013-08-09 21:19:41
【问题描述】:
我从我的主页打开一个弹出窗口,代码如下:
<a href="http://external.domain.tld/"
onclick="window.open(this.href, '_blank',
'width=512,height=512,left=200,top=100');return false">
Open popup
</a>
这很好用,但我的问题是弹出窗口中加载的文档有权更改打开器窗口的位置。这甚至在弹出窗口中的文档来自不同域时也有效。它没有读取位置的权限,但可以更改位置。我不想要那个。我希望弹出窗口与我的主页完全断开。
即使没有 JavaScript,它也无法工作。当我使用target="_blank" 属性在新选项卡中打开另一个页面时,仍然允许此选项卡导航到opener 窗口并更改其位置:
<a href="http://external.domain.tld/" target="_blank">
Open in new tab
</a>
这是打开的文档中不应该被允许的代码:
<script>
opener.location.href = "http://badsite.tld/";
</script>
您可以观看现场演示 here。单击两个链接之一以在弹出窗口或新选项卡中打开另一个页面,然后在打开器窗口中加载第三个页面。这就是我想要阻止的。
我可以使用一些技巧来断开打开器窗口和打开的窗口之间的连接吗?理想情况下,打开的窗口根本不应该知道它是由任何其他窗口打开的。
【问题讨论】:
-
您确定您在这些域上没有任何设置。一个是另一个的子域,通过特定设置,您可以访问另一个域。
-
@putvande 是的,我确定。该演示使用不同的子域(因为我只能访问一个域)。但是生产服务器上的真正问题使用完全不同的域,并且在任何地方都没有特殊规则。打开的窗口无权从打开的窗口读取或调用任何内容,因此同源限制正常工作。它们只是不适用于更改打开器窗口的位置 href。
标签: javascript html window.open window.opener