欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

用window.onerror捕獲并上報Js錯誤的方法

 更新時間:2016年01月27日 12:57:44   作者:趙先烈  
這篇文章主要介紹了用window.onerror捕獲并上報Js錯誤的方法,需要的朋友可以參考下

前兩天有個2048游戲的用戶反饋說,打開游戲后不能玩兒,只有一個游戲面板,數(shù)字無法初始化,更無法移動,設(shè)備為iPhone 4S、iOS 5.1。嘗試從微信調(diào)起Safari打開,依然不好使。由于游戲中運用了比較多的HTML5特性,所以粗略估計是有JS報錯導(dǎo)致。不過這樣的信息該如何捕獲到呢?當(dāng)然是傳說中的window.onerror。

W3C找到關(guān)于window.onerror的方法體介紹:

這個意思,基本可以就是說,window.onerror方法,我們可以寫成:

/** 
 * @param {String} errorMessage  錯誤信息 
 * @param {String} scriptURI   出錯的文件 
 * @param {Long}  lineNumber   出錯代碼的行號 
 * @param {Long}  columnNumber  出錯代碼的列號 
 * @param {Object} errorObj    錯誤的詳細(xì)信息,Anything 
 */
window.onerror = function(errorMessage, scriptURI, lineNumber,columnNumber,errorObj) { 
  // TODO 
}

不過使用過程中還得注意兼容性問題,不是所有瀏覽器都有參數(shù)列表中的所有參數(shù),chrome之類的,都是瀏覽器標(biāo)準(zhǔn)草案的領(lǐng)跑者,這些個參數(shù)用就是了!

于是,可以寫一個小Demo來嘗試一下:

<!DOCTYPE html> 
<html> 
<head> 
  <title>Js錯誤捕獲</title> 
  <script type="text/javascript"> 
  /** 
   * @param {String} errorMessage  錯誤信息 
   * @param {String} scriptURI   出錯的文件 
   * @param {Long}  lineNumber   出錯代碼的行號 
   * @param {Long}  columnNumber  出錯代碼的列號 
   * @param {Object} errorObj    錯誤的詳細(xì)信息,Anything 
   */ 
  window.onerror = function(errorMessage, scriptURI, lineNumber,columnNumber,errorObj) { 
    console.log("錯誤信息:" , errorMessage); 
    console.log("出錯文件:" , scriptURI); 
    console.log("出錯行號:" , lineNumber); 
    console.log("出錯列號:" , columnNumber); 
    console.log("錯誤詳情:" , errorObj); 
  } 
  </script> 
</head> 
<body> 
  <script type="text/javascript" src="error.js"></script> 
</body> 
</html>

其中error.js文件中的內(nèi)容,簡單的這樣寫一句:

throw new Error("出錯了!");
用瀏覽器跑起來以后,打開console,基本就是這樣的了:

所以,這些數(shù)據(jù)都是可以做上報的了。
當(dāng)然了,上面的error.js是和html頁面同域名下,如果error.js不在同域下,會是怎樣的?我們把error.js的引用改一下:

<script type="text/javascript" src="http://doitbegin.duapp.com/error.js"></script>
再來打開console,我們看到的是這樣的:

相當(dāng)于window.onerror方法只捕獲到了一個errorMessage,而且是固定字符串,毫無參考價值。查了點資料(Webkit源碼),發(fā)現(xiàn)在瀏覽器實現(xiàn)script資源加載的地方,是進行了同源策略判斷的,如果是非同源資源,errorMessage就被寫死為“Script error”了:

好在script標(biāo)簽有一個crossorigin屬性,設(shè)置它可以顯示比較詳細(xì)的錯誤信息,我們試著將script標(biāo)簽改一下:

<script type="text/javascript" src="http://doitbegin.duapp.com/error.js" crossorigin></script>
刷新頁面,這個時候看到console中的輸出是這樣的:

出現(xiàn)這個error也不意外,既然設(shè)置了error.js為crossorigin,那error.js的HTTP Response Header也必須設(shè)置非同源可訪問。為了方便設(shè)置Header,把error.js做一個小改動,更名為:error-js.php。

<?php 
  header('Access-Control-Allow-Origin:*'); 
  header('Content-type:text/javascript'); 
?> 
throw new Error('出錯了'); 

此時刷新頁面,看到console中的輸出就已經(jīng)正常了,所有信息都能正常捕獲:

OK,技術(shù)細(xì)節(jié)分析結(jié)束!我2048游戲靜態(tài)資源是放到靜態(tài)域(非同源)下的,所以要想通過window.onerror捕獲錯誤信息,就得按照上面的最后一種情況來操作了:

1、添加script的crossorigin屬性

2、配置一下服務(wù)器,設(shè)置靜態(tài)資源Javascript的Response為Access-Control-Allow-Origin

相關(guān)文章

  • mvc中form表單提交的三種方式(推薦)

    mvc中form表單提交的三種方式(推薦)

    本文給大家分享mvc中form表單提交的三種方式,分別是submit 按鈕 提交方式,$("#dataform").ajaxSubmit() 提交方式,post 提交方式,非常不錯,具有參考借鑒價值,感興趣的朋友一起看下吧
    2016-08-08
  • 實用的JS正則表達(dá)式(手機號碼/IP正則/郵編正則/電話等)

    實用的JS正則表達(dá)式(手機號碼/IP正則/郵編正則/電話等)

    實用的JS正則表達(dá)式(手機號碼/IP正則/郵編正則/電話等),經(jīng)驗積累,感興趣的朋友可以了解下,一定會對你有幫助的
    2013-01-01
  • JavaScript的9種繼承實現(xiàn)方式歸納

    JavaScript的9種繼承實現(xiàn)方式歸納

    這篇文章主要介紹了JavaScript的9種繼承實現(xiàn)方式歸納,本文講解了原型鏈繼承、原型繼承(非原型鏈)、臨時構(gòu)造器繼承、屬性拷貝、對象間繼承等繼承方式,需要的朋友可以參考下
    2015-05-05
  • 解析javascript 數(shù)組以及json元素的添加刪除

    解析javascript 數(shù)組以及json元素的添加刪除

    本篇文章是對javascript 數(shù)組以及json元素的添加刪除進行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • JavaScript使用arcgis實現(xiàn)截圖截屏功能

    JavaScript使用arcgis實現(xiàn)截圖截屏功能

    這篇文章主要為大家詳細(xì)介紹了JavaScript如何使用arcgis實現(xiàn)截圖截屏功能,類似于qq截圖,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2024-01-01
  • Javascript實現(xiàn)動態(tài)時鐘效果

    Javascript實現(xiàn)動態(tài)時鐘效果

    這篇文章主要為大家介紹了Javascript實現(xiàn)動態(tài)時鐘效果,非常詳細(xì)的注釋代碼,文具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • JS 非圖片動態(tài)loading效果實現(xiàn)代碼

    JS 非圖片動態(tài)loading效果實現(xiàn)代碼

    功能說明:譬如在按某個button時,顯示消息"Loading”,然后每隔一秒后后面加上".",至一定數(shù)量的"."時如:"Loading...",再重置此消息為"Loading",繼續(xù)動態(tài)顯示,直至按鈕事件處理完成。
    2010-04-04
  • Javascript改變CSS樣式(局部和全局)

    Javascript改變CSS樣式(局部和全局)

    改變CSS樣式分為局部和全局,下面為大家介紹下使用Javascript具體的實現(xiàn),感興趣的朋友可以參考下
    2013-12-12
  • JavaScript中將值轉(zhuǎn)換為字符串的五種方法總結(jié)

    JavaScript中將值轉(zhuǎn)換為字符串的五種方法總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于JavaScript中將值轉(zhuǎn)換為字符串的五種方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用JavaScript具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 詳解CocosCreator華容道數(shù)字拼盤

    詳解CocosCreator華容道數(shù)字拼盤

    這篇文章主要介紹了詳解CocosCreator華容道數(shù)字拼盤,對華容道感興趣的同學(xué),看完之后,可以回去親手試一下
    2021-04-04

最新評論