2015-08-28 39 views
1

我已經加入到日誌發生在瀏覽器到我的服務器端日誌事件,這就意味着JavaScript window.onerror錯誤:限制只在我的劇本

這將消息發送到我的服務器(使用,就像我會使用的console.log登錄正常運行過程中的關鍵事件)

function remoteConsoleLog(msgToLog, msgDesc) { 
    $.ajax({ 
    type: 'POST', 
    url: '/php/log_javascript_events.php', 
    data: JSON.stringify({UA: navigator.userAgent, MSG: msgToLog, MSGDESC: msgDesc}), 
    contentType: 'application/json; charset=utf-8' 
    }); 
} 

這是上面的包裝來捕捉其他錯誤(基於this):

window.onerror = function (errorMsg, url, lineNumber, column, errorObj) { 
    remoteConsoleLog(errorMsg, 'window onerror'); 
} 

這效果很好,我可以在我的服務器日誌文件中獲得所有期望的事件。然而,問題在於我收到了一些我從window.onerror處理程序中不期望的錯誤,例如通用的「腳本錯誤」(我已經看到這可能是一個CORS問題)以及其他非常具體的錯誤,例如

Uncaught ReferenceError: DealPly is not defined

(它似乎涉及與我的網站無關的瀏覽器插件)。

我的網站使用了一些外部JS文件,如JQuery等。有沒有什麼辦法可以記錄包含我的日誌記錄的JavaScript文件生成的錯誤,即排除第三方錯誤 - 或者甚至是一件好事情要做?

+0

根據以下回復我剛剛修改了包裝 - remoteConsoleLog(errorMsg,'window onerror'+ url); - 記錄腳本名稱並過濾服務器端 – KevInSol

+0

你知道是什麼原因導致'DealPly未定義'錯誤?我們由於某種原因開始看到它。 – Bainternet

回答

1

好了,我相信URL顯示了腳本的名稱,所以你可以檢查,對自己的腳本文件

var mySripts = ["a.js", "b.js"]; 
window.onerror = function (errorMsg, url, lineNumber, column, errorObj) { 
    //or however the url is formatted 
    if (myScripts.indexOf(url) > -1) { 
     remoteConsoleLog(errorMsg, 'window onerror'); 
    } 
} 
+0

我在哪裏可以得到URL? – KevInSol

+0

它發佈自己的事件處理程序(第二個參數) – BobbyTables

+0

需要更多的咖啡!謝謝 - 將試用 – KevInSol

1

我能想到的唯一的解決辦法是檢查是否url是一樣的您的js文件,並檢查errorMsg是否與「腳本錯誤」不同。

事情是這樣的:

window.onerror = function (errorMsg, url, lineNumber, column, errorObj) { 
    if(errorMsg.indexOf('Script error.') > -1 || url != "yourfile.js") { 
     return; 
    } 
    remoteConsoleLog(errorMsg, 'window onerror'); 
} 
0

只是爲了將來遊客DealPly是廣告軟件或病毒,如果你喜歡。所以問題可能是您的訪問者擁有這個廣告軟件,並且它使用的腳本有問題。只是一個猜測。