亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

window.onerror()的用法與實例分析

2019-11-20 10:40:32
字體:
來源:轉載
供稿:網友

onerror語法使用

onerror 默認有三個入參:

•msg: 錯誤信息
•url:錯誤所在文件
•line: 錯誤所在代碼行,整型
window.onerror = function(msg, url, line){ // some code };
對于 <body onerror=”some code”>形式的,可以通過arguments[0]、arguments[1]、arguments[2]依次獲取參數。

js中我們最常用的就是js容錯

window.onerror=function(){return true;}

基本特性
可以通過設置returnValue=true,或直接return true來阻止瀏覽器顯示錯誤信息。但不會阻止script debuggers彈出的調試框。
只有運行錯誤才會觸發onerror,語法錯誤不會觸發。

以下三種方式可以引發onerror:

•運行時錯誤,例如無效的對象引用或安全限制
•下載錯誤,如圖片
•在IE9中,獲取多媒體數據失敗也會引發
<script> 標簽不支持onerror。

定義在 <body> 標簽上的onerror屬性相當于window.onerror (經測試,Firefox、Opera支持,IE9、chrome無反應)。

瀏覽器兼容性

QuirksMode列出的各瀏覽器對onError的支持情況

•Chrome 13+
•Firefox 6.1+
•Internet Explorer 5.5+
•Safari 5.1+
•Opera 11.61+ (QuirksMode 測試到11.51尚不支持,我手頭上的11.61已支持)
除window對象外,支持 onerror 的元素:

•<img> 全支持
•<script> IE9/IE10/safari 5.1+/chrome 13+ 支持
<css> 和 <iframe> 不支持onerror。

問題與解決方案

對于引用外部js文件中的錯誤,WebkitMozilla類瀏覽器會篡改原始的錯誤信息,導致最后onerror獲取到的三個入參為:

復制代碼 代碼如下:

“Script error.”,”", 0

例如http://a.com/index.html,引入了http://b.com/g.js,如果g.js出錯,最終傳遞到window.onerror的信息會被篡改。

瀏覽器之所以做這樣的處理,是考慮到兩個特性:

•<script> 能執行非同源下的第三方js文件。
•<script> 元素會忽略加載的文件的MIME類型,而當作腳本來執行。
在攻擊場景中,惡意頁面引入了正常頁面的js文件,js文件會自動執行,若發生異常觸發的報錯信息,可能會泄漏某些敏感數據。這些信息最終會被惡意頁面的window.onerror處理。

經測試,存在此特性的瀏覽器(當前最新版)有Firefox、Chrome、Safari、Opera。

Adam Barth(work on the security of the Chrome browser at Google)建議的解決方案是使用CORS (Cross-Origin Resource Sharing)。

簡言之,當在頁面中 <script> 引入外部js文件時,增加一個屬性crossorigin(類似于<img> 的CROS屬性)。服務器在接受到請求時,在HTTP Header里增加一個授權字段(值可以是具體的某個域名):

Access-Control-Allow-Origin: *

瀏覽器檢測到此js已經授權此頁面所在域名,則不用再篡改由此js傳遞到window.onerror的錯誤信息了。

經測試,此方案尚未被瀏覽器實現。
已經在Chrome、Firefox的較新版本中支持。

其他參考資料

Internet Explorer http://msdn.microsoft.com/en-us/library/cc197053.aspx

Mozilla Firefox https://developer.mozilla.org/en/DOM/window.onerror

Opera http://dev.opera.com/articles/view/better-error-handling-with-window-onerror/

Wiki http://www.w3.org/wiki/DOM/window.onerror

syntax errors and runtime errors http://www.htmlgoodies.com/primers/jsp/article.php/3610081/Javascript-Basics-Part-11.htm

window.下面是一些實例大家可以參考下:

onerror = function(sMessage,sUrl,sLine){};

onerror函數的三個參數用于確定錯誤確切的信息,代表的意思依次為:錯誤信息;發生錯誤的文件;發生錯誤的行號。

示例:

<SCRIPT>window.onerror=fnErrorTrap;function fnErrorTrap(sMsg,sUrl,sLine){oErrorLog.innerHTML="<b>An error was thrown and caught.</b><p>";oErrorLog.innerHTML+="Error: " + sMsg + "<br>";oErrorLog.innerHTML+="Line: " + sLine + "<br>";oErrorLog.innerHTML+="URL: " + sUrl + "<br>";return false;}function fnThrow(){eval(oErrorCode.value);}</SCRIPT><INPUT TYPE="text" ID=oErrorCode VALUE="someObject.someProperty=true;"><INPUT TYPE="button" VALUE="Throw Error" onclick="fnThrow()"><P><DIV ID="oErrorLog"></DIV>

上面示例的方法很值得借鑒。
在捕獲js錯誤時,我們通常使用try{}catch(e){}的方式,然后通過e.errorMessage等方式獲取錯誤信息然后報告錯誤。但對于onerror事件可能很少問津,我們是否思考過如何報告錯誤所在的行號?如果想過這個是否也被這個問題所困擾過,是否認為在js里不可能捕獲錯誤的行號呢?其實本人就遇到上述的幾個問題,今日讀某人寫的一段js代碼頓然發現了onerror事件,要說onerror這個時間也是n久以前就知道了,但對于其所帶有的三個參數和其特殊性質卻一直沒有去了解過。經過自己的研究測試,對onerror事件有了一些新的認識和了解。在頁面沒有錯誤時,window.onerror事件是不存在的,也就是null(廢話!沒出錯如果onerror出現還正常嗎?)我們一般通過函數名傳遞的方式(引用的方式)將要執行的操作函數傳遞給onerror事件,如window.onerror=reportError;window.onerror=function(){alert('error')},但我們可能不知道該事件觸發時還帶有三個默認的參數,他們分別是錯誤信息,錯誤頁面的url和錯誤行號。要知道這個可是事件,就如onclick和onmouseover等事件一樣,但它是有參數。我們可以這樣測試。

<script type="text/javascript">    window.onerror=testError;    function testError(){    arglen=arguments.length;    var errorMsg="參數個數:"+arglen+"個";    for(var i=0;i<arglen;i++){    errorMsg+="/n參數"+(i+1)+":"+arguments[i];  }    alert(errorMsg);    window.onerror=null;    return true;  }  function test(){    error  }  test()  </script> 

首先將testError方法綁定給onerror事件,然后在test方法里觸發一個錯誤,在IE中執行時我們發現如下提示:
--------------------------- Microsoft Internet Explorer ---------------------------
參數個數:3個
參數1:'error' 未定義
參數2:file://E:/yanwei/test/testError.html
參數3:14
--------------------------- 確定 ---------------------------
可以發現,當出錯時函數testError捕獲到了三個參數。通過將函數綁定到onerror事件就可以在頁面出錯時捕獲以上三個參數。
在測試中還發現以下一些問題:
1、通過在函數末尾加上return true,可以在函數出錯時不會彈出系統的錯誤信息(IE)。
2、如果頁面出現多次錯誤,只捕獲第一次錯誤并進行處理然后終止后面程序的執行。
3、onerror事件并不能捕獲所有的錯誤,只能捕獲函數外或函數內錯誤(??這個是什么意思,可不是開玩笑呢),如 adasdf; function test(){ aaaa; } 可以捕獲到adasdf未定義的錯誤 function test(){ aaaa; } 可以捕獲到aaaa未定義的錯誤,而對于functiona test(){}或function test()dd{} 的錯誤卻不能捕獲而會直接彈出系統錯誤信息。
4、onerror在IE和FF等瀏覽器執行方式是一樣的,而且都包含這三個參數。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频久久久久| 亚洲免费电影在线观看| 国产视频久久久| 911国产网站尤物在线观看| 国产精品成人国产乱一区| 欧美在线亚洲在线| 日本不卡视频在线播放| 亚洲女人天堂视频| xxxx欧美18另类的高清| 亚洲国产天堂久久国产91| 日韩天堂在线视频| 国产精品一二三视频| 国产成人一区二区| 亚洲一级免费视频| 欧美激情videoshd| 中文字幕日韩精品在线观看| 国产精品户外野外| 91精品久久久久久久久青青| 国产欧美日韩免费看aⅴ视频| 国产精品老女人视频| 日韩三级成人av网| 亚洲三级 欧美三级| 自拍偷拍亚洲欧美| 国产精品999| 亚洲第五色综合网| 91免费高清视频| 欧美性猛交xxxx免费看久久久| 亚洲国产成人精品久久| 成人精品在线视频| 91国产中文字幕| 中文字幕在线观看日韩| 日韩精品一区二区视频| 人体精品一二三区| 日本在线观看天堂男亚洲| 亚洲欧洲激情在线| 欧美性xxxxhd| 国产精品久久久久久久久久99| 日本欧美在线视频| 久久久噜噜噜久久久| www.99久久热国产日韩欧美.com| 91沈先生作品| 欧美性xxxx| 精品美女久久久久久免费| 久久精品国产亚洲精品| 欧美激情久久久久久| 911国产网站尤物在线观看| 国内精品一区二区三区| 国产精品第2页| 在线观看不卡av| 伊人亚洲福利一区二区三区| 一区国产精品视频| 在线精品视频视频中文字幕| 欧美一级片一区| 欧美日韩加勒比精品一区| 国产一区二区在线免费| 日本91av在线播放| 91亚洲va在线va天堂va国| 97在线日本国产| 久久久影视精品| 日韩电影免费观看在线| 国产成人在线视频| 亚洲一区制服诱惑| 国产精品福利在线观看网址| 亚洲精品91美女久久久久久久| 欧美中文在线视频| 热re91久久精品国99热蜜臀| 午夜免费久久久久| 久久久久久尹人网香蕉| 中文字幕日韩av| 亚洲女成人图区| 日韩中文娱乐网| 日韩在线不卡视频| 久久久免费观看视频| 国产91ⅴ在线精品免费观看| 欧美精品在线观看| 成人免费视频xnxx.com| 国产精品久久久久久久7电影| 国内精品伊人久久| 久久久久久久久网站| 91沈先生作品| 日韩av在线免费播放| 国产成人精品国内自产拍免费看| 欧美人与性动交a欧美精品| 亚洲肉体裸体xxxx137| 韩曰欧美视频免费观看| www.精品av.com| 亚洲专区中文字幕| 97av在线视频免费播放| 久久影院在线观看| 欧美多人乱p欧美4p久久| 亚洲深夜福利视频| 97国产精品久久| 欧美成人午夜激情在线| 亚洲偷熟乱区亚洲香蕉av| 国产成人精品电影久久久| 一区二区三区视频免费| 国产99久久久欧美黑人| 欧美丝袜第一区| 国产成人精品久久亚洲高清不卡| 亚洲va欧美va国产综合剧情| 欧美在线视频免费| 日韩精品电影网| 91久久精品美女高潮| 国产精品男人爽免费视频1| 日韩欧美一区二区三区久久| 久久久久久一区二区三区| 韩国精品久久久999| 亚洲女人天堂色在线7777| 日韩av在线电影网| 97色在线视频观看| 亚洲国产免费av| 中文字幕亚洲欧美日韩2019| 92福利视频午夜1000合集在线观看| 中文字幕国产精品久久| 国产精品久久久久7777婷婷| 国产亚洲精品久久久优势| 日本一本a高清免费不卡| 一区二区三区精品99久久| 久久av在线播放| 亚洲视频一区二区| 亚洲少妇中文在线| 国产精品日韩欧美综合| 九九热精品视频| 日韩美女免费视频| 中文字幕在线视频日韩| 久久久久九九九九| 国产91精品青草社区| 51视频国产精品一区二区| 国产91ⅴ在线精品免费观看| 欧美做爰性生交视频| 一区二区欧美在线| 亚洲午夜小视频| 国产精品入口免费视| 日韩精品视频在线播放| 深夜精品寂寞黄网站在线观看| 欧美日韩在线一区| 夜夜嗨av一区二区三区免费区| 91九色视频导航| 欧美色xxxx| 欧美中文在线免费| 91国内产香蕉| 成人久久久久爱| 欧美肥臀大乳一区二区免费视频| 欧洲永久精品大片ww免费漫画| 国产精品香蕉在线观看| 亚洲一区二区三区视频播放| 亚洲精品欧美日韩专区| 日韩a**站在线观看| 国产一区欧美二区三区| 亚洲欧美国产日韩天堂区| 富二代精品短视频| 1769国内精品视频在线播放| 国产精品jizz在线观看麻豆| 欧美激情视频播放| 亚洲欧洲第一视频| 国产伊人精品在线| 日韩精品视频在线观看网址| 日韩高清电影免费观看完整版| 欧美国产日本在线| 欧美成人自拍视频| 亚洲综合中文字幕在线观看| 色一情一乱一区二区| 97色在线视频观看| 中文字幕一区电影|