惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Blog — PlanetScale
Blog — PlanetScale
小众软件
小众软件
F
Fortinet All Blogs
博客园 - 叶小钗
博客园_首页
D
DataBreaches.Net
Apple Machine Learning Research
Apple Machine Learning Research
U
Unit 42
爱范儿
爱范儿
aimingoo的专栏
aimingoo的专栏
博客园 - Franky
Martin Fowler
Martin Fowler
酷 壳 – CoolShell
酷 壳 – CoolShell
The Cloudflare Blog
A
About on SuperTechFans
Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
IT之家
IT之家
M
MIT News - Artificial intelligence
有赞技术团队
有赞技术团队
博客园 - 【当耐特】
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog

囧克斯

奔四了,写给40岁的自己 有序退网 我和 Vue.js 的十年 我参与《代码之外 Beyond Code》的故事 博客站迁移至 VitePress 的备忘 写给我的奶奶 中文格式化小工具 zhlint 及其开发心得 vue-mark-display:用 markdown 语法轻松撰写幻灯片 我对技术会议的一些看法 VueConf Hangzhou 见闻 第四届 CSSConf CN 见闻 [译]Web 表单的未来 [译]苹果正在做一些他们的程序员明摆着不想要的东西 [译]为什么我不会无偿加班且你也不应该 [译]如果管理是唯一可走的路,那就完蛋了 [译]如何撰写 Git 提交信息 [译]C 程序的原则 Vue 2.0 来了! Weex 近 4 个月的开源之路 Weex 在 JS Runtime 内的多实例管理 我理解的 SPA 我理解的 Flux 架构 【整理】Vue 2.0 自 beta 1 到 beta 4 以来的主要更新 通过一张图走进 Vue 2.0 Code Review for Vue 2.0 Preview Vue 2.0 发布啦! 务实的小而美 Vue.js 1.0.0 发布了! [译]如何成为一名卓越的前端工程师 手机淘宝前端的图片相关工作流程梳理
防止页面被 iframe 内脚本“打散”的两种方法
勾三股四 · 2009-06-24 · via 囧克斯

本文摘自 勾三股四 更早时期的 不老歌 博客。


页面被 iframe 内脚本“打散”的情况越来越常见。比如,在百度的搜索结果页面中有这样的脚本:

if (top.location != self.location) {
	top.location=self.location;
}

这时,如果我们把这个页面作为 iframe 放到另一个页面里,则外层页面会被直接跳转至搜索页面。这个代码对页面本身做了保护——即不会被其它页面引用,也给我们在需要引用这些页面时带来了一些困扰。下面介绍两种解决方法:

1. 通过掩盖 location 和 domain 变量,像下面的代码那样:

if(document.all){
	var isIE = true;
	var location = "";
	var domain = document.domain;
}

再对 top.location 赋值就不会将页面“打散”了。
不过这个方法仅仅对 IE 浏览器管用,且会提示脚本错误。

2. 通过 onbeforeunload 事件监听,中断“打散”的动作。即:

window.onbeforeunload = function(evt) {
	return '(请用户选择留在此页面的提示)';
};

这样,在页面跳转之前,会弹出一个确认对话框提示用户要不要继续执行页面跳转(即“打散”)的操作。如果用户选择了“否”,则页面会终止跳转操作, iframe 里的脚本也就不会“打散”整个页面。
这个方法也有弱点,就是它总是弹出确认对话框,有的时候这会让人很受不了。

介绍完毕,两种方法各有优劣,可视状况采用不同的方法。