最近开发个功能,对于富文本的a标签,要求在当前标签弹窗打开。
实现方案是对a标签绑定click事件,点击时阻止默认,然后读取href,在弹窗组件中嵌套iframe,将iframe跳转到该href。
但跳转到个别站点时,竟将外层的页面也跳转了。
排查后发现,应该是个别站点中对修改了父级或顶级窗口的location,如:
1 | // 控制父级窗口跳转 |
确定问题后,尝试了一些方案,均无法解决:
* 监听beforeunload,看下能否有preventDefault类似的操作来阻止页面跳转。* 使用Object.freee冻结location对象,让子窗口不可修改。
后来在网上找到方案,利用h5 iframe的新特性sandbox完美解决,支持度: caniuse也比较好,ie9+。
示例:
1 | <iframe sandbox="allow-same-origin allow-scripts allow-popups"></iframe> |
参考: