SlideShare a Scribd company logo
1 of 25
javascript-stacktrace
By zfcao@corp.netease.com
2013-08-14
in http://t.163.com
" 最大的错误就是选择了一个错误的选题 "
——亚里士多德
——曹智峰
人人都有拖延症:
http://v.youku.com/v_show/id_XNTk2NDI0NDg4.html
什么是错误
当 JavaScript 引擎执行 JavaScript 代码时,会发生各种错误:
 可能是语法错误,通常是程序员造成的编码错误或错别字。
 可能是拼写错误或语言中缺少的功能(可能由于浏览器差异)。
 可能是由于来自服务器或用户的错误输出而导致的错误。
当然,也可能是由于许多其他不可预知的因素。
JavaScript 异常档案 : http://errors.totorojs.org/wiki/
前端 vs 后端
后端 – 服务器 error log
前端 – 浏览器 (console.log ???)
怎么捕获错误
Try{
XXX
}catch(e){
console.error (e.stack)
}
But 对于延时执行(或称异步执行
,例如通过事件、计时器等触发的代
码)代码却无能为力 )
怎么捕获错误
window.onerror = function(msg , url , line){
msg : xxx, // 错误描述,比如: a is not defined
url : xxx, // 出错脚本所在的 url
lineNumber : 123 // 出错脚本的行数
}
可以通 置过设 returnValue=true ,或直接 return true 来阻止 器 示 信息。浏览 显 错误
但不会阻止 script debuggers 出的 框弹 调试
怎么捕获错误
window.onerror
只有 行 才会触运 错误 发 onerror , 法 不会触 。语 错误 发
以下三 方式可以引种 发 onerror :
• 行 ,例如无效的 象引用或安全限制运 时错误 对
• 下 ,如 片载错误 图
• 在 IE9 中, 取多媒体数据失 也会引获 败 发
<script> 不支持标签 onerror 。
定 在义 <body> 上的标签 onerror 属性相当于 window.onerror ( ,经测试 Firefox 、 Opera
支持, IE9 、 chrome 无反应 ) 。
不同浏览器错误的差异
IE6
页面内脚本 同域外部脚本 跨域外部脚本
msg ✓ ✓ ✓
url ✓ (当前页) ✓ (当前页) ✓ (当前页)
不同浏览器错误的差异
IE7 、 IE8 、 IE9
页面内脚本 同域外部脚本 跨域外部脚本
msg ✓ ✓ ✓
url ✓ (当前页) ✓ ✓
不同浏览器错误的差异
Chrome 、 Firefox 、 Safari
页面内脚本 同域外部脚本 跨域外部脚本
msg ✓ ✓ ✗ ( Script error )
url ✓ (当前页) ✓ ✗ ( "" )
外部 js 错误解决
“ “Script error.”,”“, 0 好没用的信息(浏览器出于安全考虑)
解决:当在页面中 <script> 引入外部 js 文件时,增加一个属性
crossorigin (类似于 <img> 的 CROS 属性)。服务器在接受到请求
时,在 HTTP Header 里增加一个授权字段 ( 值可以是具体的某个域
名 ) :
But: 经测试,此方案尚未被浏览器实现。
已经在 Chrome 、 Firefox 的较新版本中支持。
记录错误日志
1. 使用简单强大的 beacon 将错误信息传递给日志服务器
记录 try.. Catch(ex){log(ex.msg)} window.onerror = log(msg: msg, url: url, line: line)
2. 侵入式 yahoo 的 bmrg :
http://velocity.oreilly.com.cn/2011/ppts/Velocity-China-BettyTso-2011.pdf
微博把错误怎么了
• 错误捕获
• 分析错误
• 错误监控
• 解决错误(部分)
错误捕获
同步错误:
微博是基于 task
同 步顺序执行的
,所以在每个
task run 时进行
try catch:
错误捕获
• 异步错误:
• 对于通过事件、计时器、用户操作等延迟触发的代码:
• ErrorCatch.js :
• ErrorCatch 需在所有 task 执行之前注册,防止
window.onerror 因为没加载但却触发了错误 !!!
ErrorCatch.js
return {
pageid: window._ba_utm_s || 0,
file: encodeURIComponent(url) || "",
url: encodeURIComponent(location.href),
message: encodeURIComponent(msg) || "",
line: encodeURIComponent(line) || 0,
samedomain: (top == window)
}
_ba_utm_s 面页 标记 id:window['_ba_utm_s'] = '170';
• 在开发环境中,也可以通过注入 muscula: http://www.muscula.com/
错误分析
• 有多少错误
• 错误都在哪儿
• 错误在浏览器中的分布
• 都有什么错误
目前遇到的困难
• 大量错误不知道如何复现
• 高级浏览器对错误信息的提示太笼统
• 后台统计系统的完善
• Qunar 强大的统计系统
都有什么错误
对象不支持此属性或方法
Script error.
TypeError: 'undefined' is not an object
Uncaught TypeError: Cannot read property 'nodeName' of null
TypeError: 'null' is not an object
物件不支援此屬性或方法
TypeError: event.target is undefined
ReferenceError: Can't find variable: BdPlayer
Uncaught SyntaxError: Unexpected token 晚
错误在浏览器中的分布
有多少错误
平均每日 223 万条错误日志。( 2013/06/19 -- 2013/07/04 )
首页监控图
1.window.onerror 理 步触 , 主 面与处 异 发错误 页 cdn 上的 js 跨域 ,无法捕 准 ?时 获 确错误
2. js 被 成一行后, 没有 法定位到行号?压缩 确实 办
Q&A

More Related Content

What's hot

PHP 應用之一 socket funion : 偽 WEB Server
PHP 應用之一 socket funion : 偽 WEB ServerPHP 應用之一 socket funion : 偽 WEB Server
PHP 應用之一 socket funion : 偽 WEB Server志賢 黃
 
動手打造 application framework-twMVC#15
動手打造 application framework-twMVC#15動手打造 application framework-twMVC#15
動手打造 application framework-twMVC#15twMVC
 
利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geekJohnson Gau
 
twMVC#19 | 微信公眾平台申請與wechat api 開發血淚史
twMVC#19 | 微信公眾平台申請與wechat api 開發血淚史twMVC#19 | 微信公眾平台申請與wechat api 開發血淚史
twMVC#19 | 微信公眾平台申請與wechat api 開發血淚史twMVC
 
NodeJS基礎教學&簡介
NodeJS基礎教學&簡介NodeJS基礎教學&簡介
NodeJS基礎教學&簡介GO LL
 
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊twMVC
 
Node.js從無到有 基本課程
Node.js從無到有 基本課程Node.js從無到有 基本課程
Node.js從無到有 基本課程Simon Su
 
twMVC#32應用 ASP.NET WebAPI2 Odata 建置高互動性 APIS
twMVC#32應用 ASP.NET WebAPI2 Odata 建置高互動性 APIStwMVC#32應用 ASP.NET WebAPI2 Odata 建置高互動性 APIS
twMVC#32應用 ASP.NET WebAPI2 Odata 建置高互動性 APIStwMVC
 
使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統Hsu Ping Feng
 
Koa 正在等一個人
Koa 正在等一個人Koa 正在等一個人
Koa 正在等一個人Fred Chien
 
學好 node.js 不可不知的事
學好 node.js 不可不知的事學好 node.js 不可不知的事
學好 node.js 不可不知的事Ben Lue
 
快速定位开发常见的前端问题
快速定位开发常见的前端问题快速定位开发常见的前端问题
快速定位开发常见的前端问题taobao.com
 
20220316 laravel I
20220316 laravel I20220316 laravel I
20220316 laravel INCUDSC
 
twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧twMVC
 
開發的效能與效率-twMVC#15
開發的效能與效率-twMVC#15開發的效能與效率-twMVC#15
開發的效能與效率-twMVC#15twMVC
 
twMVC#19 | opserver監控服務的解決
twMVC#19 | opserver監控服務的解決twMVC#19 | opserver監控服務的解決
twMVC#19 | opserver監控服務的解決twMVC
 
Node Web开发实战
Node Web开发实战Node Web开发实战
Node Web开发实战fengmk2
 
超。光速 網站最佳化實戰 -twMVC#8
超。光速 網站最佳化實戰 -twMVC#8超。光速 網站最佳化實戰 -twMVC#8
超。光速 網站最佳化實戰 -twMVC#8twMVC
 
Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2twMVC
 
用最潮的 Java script 盡情開發 kde qt 程式
用最潮的 Java script 盡情開發 kde qt 程式用最潮的 Java script 盡情開發 kde qt 程式
用最潮的 Java script 盡情開發 kde qt 程式Fred Chien
 

What's hot (20)

PHP 應用之一 socket funion : 偽 WEB Server
PHP 應用之一 socket funion : 偽 WEB ServerPHP 應用之一 socket funion : 偽 WEB Server
PHP 應用之一 socket funion : 偽 WEB Server
 
動手打造 application framework-twMVC#15
動手打造 application framework-twMVC#15動手打造 application framework-twMVC#15
動手打造 application framework-twMVC#15
 
利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek
 
twMVC#19 | 微信公眾平台申請與wechat api 開發血淚史
twMVC#19 | 微信公眾平台申請與wechat api 開發血淚史twMVC#19 | 微信公眾平台申請與wechat api 開發血淚史
twMVC#19 | 微信公眾平台申請與wechat api 開發血淚史
 
NodeJS基礎教學&簡介
NodeJS基礎教學&簡介NodeJS基礎教學&簡介
NodeJS基礎教學&簡介
 
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
 
Node.js從無到有 基本課程
Node.js從無到有 基本課程Node.js從無到有 基本課程
Node.js從無到有 基本課程
 
twMVC#32應用 ASP.NET WebAPI2 Odata 建置高互動性 APIS
twMVC#32應用 ASP.NET WebAPI2 Odata 建置高互動性 APIStwMVC#32應用 ASP.NET WebAPI2 Odata 建置高互動性 APIS
twMVC#32應用 ASP.NET WebAPI2 Odata 建置高互動性 APIS
 
使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統
 
Koa 正在等一個人
Koa 正在等一個人Koa 正在等一個人
Koa 正在等一個人
 
學好 node.js 不可不知的事
學好 node.js 不可不知的事學好 node.js 不可不知的事
學好 node.js 不可不知的事
 
快速定位开发常见的前端问题
快速定位开发常见的前端问题快速定位开发常见的前端问题
快速定位开发常见的前端问题
 
20220316 laravel I
20220316 laravel I20220316 laravel I
20220316 laravel I
 
twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧
 
開發的效能與效率-twMVC#15
開發的效能與效率-twMVC#15開發的效能與效率-twMVC#15
開發的效能與效率-twMVC#15
 
twMVC#19 | opserver監控服務的解決
twMVC#19 | opserver監控服務的解決twMVC#19 | opserver監控服務的解決
twMVC#19 | opserver監控服務的解決
 
Node Web开发实战
Node Web开发实战Node Web开发实战
Node Web开发实战
 
超。光速 網站最佳化實戰 -twMVC#8
超。光速 網站最佳化實戰 -twMVC#8超。光速 網站最佳化實戰 -twMVC#8
超。光速 網站最佳化實戰 -twMVC#8
 
Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2
 
用最潮的 Java script 盡情開發 kde qt 程式
用最潮的 Java script 盡情開發 kde qt 程式用最潮的 Java script 盡情開發 kde qt 程式
用最潮的 Java script 盡情開發 kde qt 程式
 

Viewers also liked

Folhetim do Estudante - Ano V - Núm. 51
Folhetim do Estudante - Ano V - Núm. 51Folhetim do Estudante - Ano V - Núm. 51
Folhetim do Estudante - Ano V - Núm. 51Valter Gomes
 
Folhetim do Estudante - Ano V - Núm. 52
Folhetim do Estudante - Ano V - Núm. 52Folhetim do Estudante - Ano V - Núm. 52
Folhetim do Estudante - Ano V - Núm. 52Valter Gomes
 
CS 414 (IT Project Management)
CS 414 (IT Project Management)CS 414 (IT Project Management)
CS 414 (IT Project Management)raszky
 
20. İTÜ EMÖS
20. İTÜ EMÖS20. İTÜ EMÖS
20. İTÜ EMÖSituemk
 
Folhetim do Estudante - Ano V - Núm. 53
Folhetim do Estudante - Ano V - Núm. 53Folhetim do Estudante - Ano V - Núm. 53
Folhetim do Estudante - Ano V - Núm. 53Valter Gomes
 
Underscore
UnderscoreUnderscore
Underscorecazhfe
 
Эртний оршуулах ёсон
Эртний оршуулах ёсонЭртний оршуулах ёсон
Эртний оршуулах ёсонOtgonbayar Chinbaatar
 
цусан суулгын амёб (Entameoba histolytica)
цусан суулгын амёб (Entameoba histolytica)цусан суулгын амёб (Entameoba histolytica)
цусан суулгын амёб (Entameoba histolytica)Otgonbayar Chinbaatar
 
Ficks law
Ficks lawFicks law
Ficks lawtazien
 
12 stages of the hero s journey
12 stages of the hero s journey12 stages of the hero s journey
12 stages of the hero s journeykalexander001
 

Viewers also liked (19)

Folhetim do Estudante - Ano V - Núm. 51
Folhetim do Estudante - Ano V - Núm. 51Folhetim do Estudante - Ano V - Núm. 51
Folhetim do Estudante - Ano V - Núm. 51
 
Composition
CompositionComposition
Composition
 
Folhetim do Estudante - Ano V - Núm. 52
Folhetim do Estudante - Ano V - Núm. 52Folhetim do Estudante - Ano V - Núm. 52
Folhetim do Estudante - Ano V - Núm. 52
 
CS 414 (IT Project Management)
CS 414 (IT Project Management)CS 414 (IT Project Management)
CS 414 (IT Project Management)
 
Cọ Sơn Thanh Bình
Cọ Sơn Thanh BìnhCọ Sơn Thanh Bình
Cọ Sơn Thanh Bình
 
Textuur varken appelsien
Textuur varken appelsienTextuur varken appelsien
Textuur varken appelsien
 
20. İTÜ EMÖS
20. İTÜ EMÖS20. İTÜ EMÖS
20. İTÜ EMÖS
 
Html5
Html5Html5
Html5
 
Ilnp
IlnpIlnp
Ilnp
 
Unlike me
Unlike meUnlike me
Unlike me
 
Folhetim do Estudante - Ano V - Núm. 53
Folhetim do Estudante - Ano V - Núm. 53Folhetim do Estudante - Ano V - Núm. 53
Folhetim do Estudante - Ano V - Núm. 53
 
Underscore
UnderscoreUnderscore
Underscore
 
Эртний оршуулах ёсон
Эртний оршуулах ёсонЭртний оршуулах ёсон
Эртний оршуулах ёсон
 
цусан суулгын амёб (Entameoba histolytica)
цусан суулгын амёб (Entameoba histolytica)цусан суулгын амёб (Entameoba histolytica)
цусан суулгын амёб (Entameoba histolytica)
 
Ficks law
Ficks lawFicks law
Ficks law
 
Havdar
HavdarHavdar
Havdar
 
Хавтгай хорхой
Хавтгай хорхойХавтгай хорхой
Хавтгай хорхой
 
Үр хөндөлт
Үр хөндөлтҮр хөндөлт
Үр хөндөлт
 
12 stages of the hero s journey
12 stages of the hero s journey12 stages of the hero s journey
12 stages of the hero s journey
 

Similar to Javascript stacktrace

张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐zhangsuoyong
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型Jackson Tian
 
钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具taobao.com
 
富文本编辑器在互联网上的应用
富文本编辑器在互联网上的应用富文本编辑器在互联网上的应用
富文本编辑器在互联网上的应用luolonghao
 
Php应用程序常见安全问题解析
Php应用程序常见安全问题解析Php应用程序常见安全问题解析
Php应用程序常见安全问题解析mysqlops
 
恶意网页分析实战
恶意网页分析实战恶意网页分析实战
恶意网页分析实战Huang Toby
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型裕波 周
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践longhao
 
Web设计 3 java_script初探(程序员与设计师的双重眼光)
Web设计 3 java_script初探(程序员与设计师的双重眼光)Web设计 3 java_script初探(程序员与设计师的双重眼光)
Web设计 3 java_script初探(程序员与设计师的双重眼光)ziggear
 
Browser vs. Node.js Jackson Tian Shanghai
Browser vs. Node.js   Jackson Tian ShanghaiBrowser vs. Node.js   Jackson Tian Shanghai
Browser vs. Node.js Jackson Tian ShanghaiJackson Tian
 
常用开发工具介绍
常用开发工具介绍常用开发工具介绍
常用开发工具介绍haozes
 
基于Greasemonkey的Firefox浏览器扩展
基于Greasemonkey的Firefox浏览器扩展基于Greasemonkey的Firefox浏览器扩展
基于Greasemonkey的Firefox浏览器扩展agen
 
Nodejs部门分享
Nodejs部门分享Nodejs部门分享
Nodejs部门分享zffl
 
钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会Zhi Zhong
 
July.2011.w3ctech
July.2011.w3ctechJuly.2011.w3ctech
July.2011.w3ctechKai Cui
 
基于Greasemonkey的Firefox浏览器扩展
基于Greasemonkey的Firefox浏览器扩展基于Greasemonkey的Firefox浏览器扩展
基于Greasemonkey的Firefox浏览器扩展agen
 
前端性能测试
前端性能测试前端性能测试
前端性能测试tbmallf2e
 
WEB 安全基础
WEB 安全基础WEB 安全基础
WEB 安全基础xki
 
JavaScript Engine
JavaScript EngineJavaScript Engine
JavaScript Enginejay li
 

Similar to Javascript stacktrace (20)

张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
 
钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具
 
Berserk js
Berserk jsBerserk js
Berserk js
 
富文本编辑器在互联网上的应用
富文本编辑器在互联网上的应用富文本编辑器在互联网上的应用
富文本编辑器在互联网上的应用
 
Php应用程序常见安全问题解析
Php应用程序常见安全问题解析Php应用程序常见安全问题解析
Php应用程序常见安全问题解析
 
恶意网页分析实战
恶意网页分析实战恶意网页分析实战
恶意网页分析实战
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践
 
Web设计 3 java_script初探(程序员与设计师的双重眼光)
Web设计 3 java_script初探(程序员与设计师的双重眼光)Web设计 3 java_script初探(程序员与设计师的双重眼光)
Web设计 3 java_script初探(程序员与设计师的双重眼光)
 
Browser vs. Node.js Jackson Tian Shanghai
Browser vs. Node.js   Jackson Tian ShanghaiBrowser vs. Node.js   Jackson Tian Shanghai
Browser vs. Node.js Jackson Tian Shanghai
 
常用开发工具介绍
常用开发工具介绍常用开发工具介绍
常用开发工具介绍
 
基于Greasemonkey的Firefox浏览器扩展
基于Greasemonkey的Firefox浏览器扩展基于Greasemonkey的Firefox浏览器扩展
基于Greasemonkey的Firefox浏览器扩展
 
Nodejs部门分享
Nodejs部门分享Nodejs部门分享
Nodejs部门分享
 
钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会
 
July.2011.w3ctech
July.2011.w3ctechJuly.2011.w3ctech
July.2011.w3ctech
 
基于Greasemonkey的Firefox浏览器扩展
基于Greasemonkey的Firefox浏览器扩展基于Greasemonkey的Firefox浏览器扩展
基于Greasemonkey的Firefox浏览器扩展
 
前端性能测试
前端性能测试前端性能测试
前端性能测试
 
WEB 安全基础
WEB 安全基础WEB 安全基础
WEB 安全基础
 
JavaScript Engine
JavaScript EngineJavaScript Engine
JavaScript Engine
 

Javascript stacktrace

Editor's Notes

  1. 下一页是错误的概念
  2. 下一页是错误的概念
  3. 下一页,知道什么是错误以后那我们应该如何去捕获错误呢
  4. 其实这里有坑,讲解决的问题的时候会讲这个
  5. 最坑爹的就是这几个高级浏览器,统计到的错误全部都是 Script error ,基本等于毫无意义。 这三个表我都没有讲 line ,为什么呢,因为我们大部分的 js 都是来自跨域外部脚本,这种情况下我们的错误一定是来自第 1 行,所以 line 对我们来说意义不大。 准备下一章“为什么选错误”
  6. url 和 refere 的区别是 url 里包含了当时的所有参数,包括 hash samedomain 则是用来判断当前页面是不是在 iframe 中
  7. 对象不支持此属性或方法 35+ Script error. 30+
  8. 这里很有意思,我们通常认为出错最多的 IE6 其实在线上的体现并不是最多 而平时量很少,大概只有 1% 的 IE7 却有不成比例的 16% 高级浏览器带来的错误跟它自身的占比也比较接近