默认的“window.top”是否可以作为引用无效



我想将用户重定向到外部页面,同时脱离框架集。

最外层的框架集很可能与执行重定向的页面位于同一域中,但它有可能跨越域。在开发中,最外层的框架集甚至可能根本不存在。理想情况下,我想涵盖所有这些情况。

最里面的页面(具有突破代码的页面(将通过HTTPS提供。目标 URL 可以是 HTTP 或 HTTPS。重定向失败是可以接受的(有一个回退链接"单击此处继续"来涵盖这种情况(,但在大多数情况下,重定向应该有效。特别是出于这个问题的目的,我不希望它比必要的更依赖于浏览器。

Web 应用程序本身是 ASP.NET。

由于框架集,我不能简单地使用 HTTP 重定向。

到目前为止,我有这个 Javascript 代码,它是从类子类化Page中注册为启动脚本的,其中 ... 表示重定向目标 URL:

((window.top == null) ? (window) : (window.top)).location = '...';

困扰我的是MDN分别对 window.top 和window.parent的看法。特别是,window.parent的文档明确指出

如果窗口没有父窗口,则其 parent 属性是对自身的引用。

这意味着我可以断言window.parent != null.但是window.top的价值没有什么相似之处.

就我的问题而言,您可以假设这两个都没有被重新分配。

所有这些都导致了一个实际的问题:window.top是否做出类似于window.parent的保证? (我有点担心条件表达式。在我迄今为止有限的测试中,它可以工作,但这并不能证明它是正确的。

据我所知,至少MDN并没有确定地说。

HTML5规范定义window.top如下:

浏览上下文 b 中文档的 Window 对象的 top IDL 属性必须返回其顶级浏览上下文的 WindowProxy 对象(如果它本身是顶级浏览上下文,则为它自己的 WindowProxy 对象(,如果它有一个,或者它自己的 WindowProxy 对象(例如,如果它是一个分离的嵌套浏览上下文(。

因此,top属性必须始终引用窗口。规范还将top定义为readonly,因此将其更改为指向其他内容是不可行的(如果规范正确实现(。

如果window.top == null,事情就很糟糕了!

最新更新