我想将用户重定向到外部页面,同时脱离框架集。
最外层的框架集很可能与执行重定向的页面位于同一域中,但它有可能跨越域。在开发中,最外层的框架集甚至可能根本不存在。理想情况下,我想涵盖所有这些情况。
最里面的页面(具有突破代码的页面(将通过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
,事情就很糟糕了!