Chrome隐身模式下跨域iframe检测失效,如何修复?
解决Chrome隐身模式下跨域iframe检测失效问题
原代码在跨域场景+Chrome隐身模式下失效的核心原因是:跨域时访问window.top会触发严格的同源策略限制,直接执行window.top === window.self会因权限问题导致判断逻辑出错,隐身模式下浏览器的安全限制会进一步放大这个问题。
正确的处理方式是通过捕获同源策略异常来判断页面是否处于iframe中,修改后的代码如下:
let isInIframe = false; try { // 同域场景下直接比较判断 isInIframe = window.top !== window.self; } catch (e) { // 捕获到安全异常,说明处于跨域iframe环境 isInIframe = true; } alert(isInIframe ? 'IFRAME' : 'NORMAL');
逻辑说明:
- 当页面是顶级页面,或处于同域iframe中时,
window.top可以正常访问,直接通过比较window.top和window.self就能准确判断 - 当页面处于跨域iframe中时,尝试访问
window.top会抛出SecurityError,此时进入catch分支,直接标记为处于iframe中 - 该方案同时兼容常规模式、隐身模式,以及同域/跨域的iframe场景
内容的提问来源于stack exchange,提问作者ar099968
相关产品推荐
相关产品推荐

