5

我在應用程序中使用window.onerror捕獲js錯誤,但事實上 - 在Chrome中如果開發工具未打開 - 那麼url參數傳遞給onerror處理程序始終等於打開的url。在Chrome中捕獲JS錯誤

雖然如果開發工具打開 - 那麼url指向確切的.js文件引起的JS錯誤。

你如何處理它?有沒有解決方法?

而且更加明確的 - 這裏有2個結果:

  1. Uncaught ReferenceError: a is not defined index:122 - 這是抓取的網頁
  2. Uncaught ReferenceError: a is not defined List.js:122後收到的 - 這是獲取相同的頁面與開發工具打開後收到的。這是一個預期的結果 - 我已經把a();調用List.js文件進行測試。

UPD:這是功能測試(使用硒的webdriver)做 - 我想捕捉的js錯誤,作進一步調查。

+0

如果你正在尋找一個需要固定的一個例外,我會說,打開開發者工具來源選項卡,然後在面板的左下角用‘暫停所有/捕獲的異常’。 – 2013-04-10 21:42:24

+1

@FabrícioMatté:它用於功能測試 - 我想捕獲js錯誤以供進一步調查。對不起,我沒有提到它最初 – zerkms 2013-04-10 21:43:11

回答

1

我們提出以下的架構:

window.addEventListener("error", handleException, false); 

function handleException(I_sMsg) { 

    if (I_sMsg.stack) { 
      sMsg = I_sMsg.stack.replaceAll(getBaseURL(), ""); 
     alert(sMsg); 
    } else if (I_sMsg.message) { 
     alert(I_sMsg.message); 
    } 

    return cancelEvent(I_sMsg); 
} 

現在,任何throw new Error("description");將通過if語句的第一部分,有一個很好的堆棧,爲您與解析網址。

它也適用於意外的異常,其結果如下信息(在這種情況下調用unexisting bibi()功能之後)

screenshot of an unexpected exception

經過進一步調查,我的框架是用某種回家提出了作業管理(如實際堆棧中所示),其中每個動作都屬於某個作業。

作業執行方法是以下的(簡化的)

try { 
     oTask.func.apply(oTask.obj, oTask.prms); 
    } catch(ex) { 
     handleException(ex); 
     return false; 
    } 

因此,這意味着每一個執行此單嘗試捕捉塊內封裝。如您所見,例外被捕獲,並傳遞給處理程序。不是錯誤

我雖然它在其他文件上工作,但它是因爲呼叫是封裝,而內api.js文件直接它不是由框架管理的免費電話。

+0

它實際上不是關於應用程序級錯誤處理,但關於意外的js錯誤,如調用非函數或訪問未定義變量的屬性。 – zerkms 2013-04-10 22:21:37

+0

是的,它也可以。我要補充的截圖在2分鐘內 – Sebas 2013-04-10 22:31:35

+0

那將是很好的,因爲我的例子與調用不存在的'A()'功能,它沒有給出任何新 – zerkms 2013-04-10 22:32:35

1

更多的是需要嘗試答案真的,但它可能會有所幫助。

Chrome最近將chrome://inspect/添加到了方便的URL列表中(完整列表請參閱chrome://chrome-urls/)。我無法找到關於這條消息的推文或博文,但我認爲這是在上個月。該網址確實適用於Chrome 28。

chrome://inspect/列出所有打開的選項卡,其中檢查鏈接,該鏈接重定向回到現有的打開頁面,但也打開DevTools。

我在想,硒測試可以在一個選項卡中打開測試網站,並在第二個選項卡打開檢查頁面,按照inspect鏈接回測試頁面,但這次與DevTools開放的,允許window.onerror捕獲更好的錯誤。

喜歡的東西:

document.getElementsByClassName('row')[n].getElementsByTagName('a')[0].click() 
+0

「並在第二個選項卡打開檢查頁面」 ---我不知道,但如果它可能 - 那麼這可能是一個解決辦法,謝謝:-) – zerkms 2013-04-10 22:22:20