我在JavaScript中記錄客戶端異常。爲了獲得堆棧跟蹤,我需要在try/catch中包裝代碼。鴨子打jQuery .on來包裝回調在try/catch
我試圖'鴨拳'jQuery的.on()
方法,而不是每個回調單獨包裝。
它的大部分工作,但由於某種原因,它是破壞我的jQueryUI排序。如果我註釋掉下面的代碼,排序工作正常。我如何正確攔截on
事件,並確保我得到的論據和背景正確?
if(window.jQuery && jQuery.fn.on){
//keep a reference to the original `on`
var _on = jQuery.fn.on;
//replace `on` with my version
jQuery.fn.on = function() {
//start from the end, looking for the callback
for(var i=arguments.length-1; i>=0; i--){
//is this the function?
if(typeof arguments[i] == 'function'){
//keep a reference to the callback
var func = arguments[i];
//replace the callback
arguments[i] = function(){
try{
//call the original callback
func.apply(this, arguments);
}catch(e){
...
}
};
break;
}
}
//call the original `on` with our new arguments
return _on.apply(this, arguments);
};
}
爲什麼不直接使用'window.onerror'事件呢?這樣你就不會去捕捉所有東西。我在這裏看到的唯一明顯的錯誤是'這個'被意外地重新分配,但我無法想象一個重要的情況。 –
謝謝@ClintTseng - 'onerror'不提供堆棧跟蹤 – bendytree