window.opener可靠吗?

10

JavaScript的window.opener属性在各种浏览器中可靠吗?它是否免疫任何安全设置和限制?打开的窗口和原窗口都在同一个域下。

有人在某些情况下遇到过问题或不良经验吗?

我提出这个问题是因为我正在计划构建一个大量依赖该属性并应支持尽可能多平台的工具。

4个回答

5

我曾是两个网站的开发人员,这两个网站广泛使用window.opener,但我不知道任何时候它会失败。这些应用程序在IE[678]、Firefox和Webkit上进行了测试;我曾非正式地使用Opera,但也没有注意到问题。

现在,"opener"关系本质上是脆弱的,因为你无法防止用户在用于打开单独弹出窗口的主浏览器窗口中访问"cnn.com"等网站。一旦原始窗口加载了新内容,"子"窗口的"window.opener"引用也就无效了。同样,当用户打开一个新的主浏览器窗口并导航到您的站点时,您的"孤立"窗口也无法真正找到它。

当然,我不能向您提供100%的保证一切都会没问题 :-) 我的故事是真实的。也许我的依赖"window.opener"没有你计划的那么严重或深入;我无法说我的应用程序中的所有内容都依赖于它的工作。


谢谢@Pointy,这符合我的属性体验。连接肯定是脆弱的,但在我的情况下无关紧要-我打算为占用整个屏幕空间的所见即所得编辑器构建一个“媒体管理器”。 - Pekka

5
值得注意的是,在Chrome浏览器中,如果文件不通过HTTP连接加载,则window.opener无法使用(尽管在Safari中可以正常工作)。

1
不,这是我在使用它时发现的其中一件事情。我希望有一个类似的资源,但是从浏览器到浏览器的这些奇怪问题似乎大多没有记录。 - Michael Heilemann

1

1

我在我的应用程序中使用了window.opener,并发现它很好用。唯一的限制是,如果用户启用了弹出窗口拦截器,则有时无法打开新窗口,从而导致问题。

如果弹出窗口拦截器是个问题,一个很好的替代方案是使用yui panel,另外JQuery UI也是一个不错的选择。

除此之外,我没有遇到任何问题,它在各种浏览器上都能很好地工作。


1
+1 表示在窗口弹出一个提示。网站应该保持在其边界内(用户要求加载它的窗口)。这只是我的个人意见。 - Jeremy
@Anil @Jer 我通常同意你们并使用窗口内弹出,但这是一个特殊情况,需要绝对必要的外部窗口(或选项卡)。 - Pekka
@Pekka웃 我知道已经过去三年了,但是请记住,有些人(包括我自己)使用扩展或浏览器属性,例如browser.link.open_newwindow=1,这使得网站完全无法打开新窗口。(通过强制它们在当前标签页中导航而不是打开新标签页) - ssokolow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接