2010-03-05 115 views
10

JavaScript的window.opener属性在各浏览器之间可靠可用,并且可以抵御任何安全设置和任何类型的限制?开启者和打开的窗口都在同一个域中。window.opener是否可靠?

有没有人遇到麻烦,在某些情况下使用它的不好经历?

我在问,因为我打算建立一个依赖它的工具,并且应该支持尽可能多的平台。

回答

5

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

现在,“开门人”关系本来就是脆弱的,因为没有多少可以阻止用户在用于打开单独弹出窗口的主浏览器窗口中访问“cnn.com”。一旦原始窗口加载了新内容,“子窗口”的“window.opener”引用不会对你有任何好处。同样,当用户离开并打开一个新的主浏览器窗口并导航到您的网站时,您的“孤儿”窗口将无法真正找到它。

当然,我不能100%保证一切都会好的:-)但是我的故事是真实的。也许我对“window.opener”的依赖并不像你计划的那么严重或深刻;我不能说我的应用程序中的所有内容都依赖于这个工作。

+0

干杯@Pointy,符合我的财产经验。这个连接绝对是脆弱的,但对我而言并不重要 - 我打算为一个占用全屏幕空间的所见即所得编辑器构建一个“媒体管理器”。 – 2010-03-05 20:12:57

1

我在我的应用程序中使用过window.opener,发现它很适合使用。它唯一的限制是,如果弹出窗口阻止程序被用户激活,那么新窗口不会打开导致问题的一些时间。

很好的替代品(如果弹出窗口拦截器是问题)是使用yui panelJQuery UI是一个不错的选择。

除此之外,我还没有遇到任何问题,因此跨浏览器很好地工作。

+1

对于窗内弹出窗口+1。一个网站应该保持在它的范围之内(用户要求加载的窗口)但我个人认为。 – Jeremy 2010-03-05 14:26:14

+0

@Anil @Jer我通常会同意你的看法,并使用窗口内弹出窗口,但这是一个特殊情况,外部窗口(或标签)是绝对必要的。 – 2010-03-05 20:10:59

+0

@Pekka웃我知道这已经三年了,但为了记录,请记住,有些人(包括我自己)使用扩展名或浏览器属性,例如“browser.link.open_newwindow = 1”,这使得网站完全无法使用打开一个新窗口。 (通过强制他们浏览当前标签而不是打开新标签) – ssokolow 2013-09-11 17:39:24

5

值得注意的是,如果文件没有通过Chrome中的HTTP连接加载,window.opener不起作用(尽管它在Safari中工作正常)。

+0

+1非常有趣!你知道这个参考链接吗? – 2010-11-17 22:12:24

+1

不,这是我通过使用它发现的那些东西之一。我希望有这样的资源,但浏览器与浏览器之间的这些差异似乎很大程度上没有记录。 – Heilemann 2010-11-19 15:52:29