JavaScript的window.opener
属性是否可以跨浏览器可靠地使用,并且不受任何安全设置和任何类型的限制的影响?开启者和打开的窗口都在同一个域中。
在某些情况下,有没有人遇到麻烦,使用它的经验不好?
我问,因为我打算构建一个严重依赖它的工具,并且应该支持尽可能多的平台。
答案 0 :(得分:5)
我现在是两个网站上的开发人员,现在广泛使用window.opener,我不知道它什么时候失败了。这些应用程序在IE [678],Firefox和Webkit上进行了测试;我非正式地使用了Opera,并没有注意到那里的问题。
现在,“开启者”关系本质上是脆弱的,因为没有太多可以防止用户在用于打开单独弹出窗口的主浏览器窗口中访问“cnn.com”。一旦原始窗口加载了新内容,“子”窗口的“window.opener”引用无论如何也不会对你有任何好处。同样,当用户打开并打开一个新的主浏览器窗口并导航到您的站点时,您的“孤儿”窗口将无法真正找到它。
当然我不能100%保证一切都会好的:-)但是我的故事是真实的。也许我对“window.opener”的依赖并不像你计划的那样严重或深刻;我不能说我的应用程序中的所有内容都取决于它的工作。
答案 1 :(得分:5)
值得注意的是,如果文件未通过Chrome中的HTTP连接加载,则window.opener不起作用(尽管在Safari中可以正常工作)。
答案 2 :(得分:1)
我在我的应用程序中使用了window.opener,发现很好用。唯一的限制是如果用户激活弹出窗口阻止程序,则不会打开新窗口导致问题。
良好的替代品(如果弹出窗口阻止程序有问题)是使用yui panel,JQuery UI也是一个不错的选择。
除此之外,我没有遇到任何问题,并且在浏览器中运行良好。
答案 3 :(得分:1)
2020在这里。不,window.opener不可靠。出于多种原因,它在IE11中可以为空白:
1)如果导航到子窗口中的新位置,则页面转换时将清除window.opener
2)如果IE11配置为保护模式,则未设置window.opener https://social.msdn.microsoft.com/Forums/ie/en-US/5d9efaa1-78d5-45dc-a04d-d9fde768379f/ie-11-windowopener-in-popup-dialog
3)如果文件不是通过Chrome中的HTTP连接加载的(如兄弟回答中所述)