2014-02-18 39 views
0

我有我的網頁上有很多的腳本:JavaScript錯誤處理

例子:

<script> 
    window.addEvent('Updated', function(data) { 

    /*I'm using a mootools javascript framework and my string below contain an error: 
     Uncaught TypeError: Cannot call method 'empty' of null*/ 

    var container = document.getElement('cart_contents_data'); 
    container.empty(); 

    }); 
</script> 

此錯誤打破了所有其他代碼(腳本塊)。 我正在尋找隔離腳本塊(彼此)的方式。

我試過這樣的事情:

<script> 
      try { 

      window.addEvent('Updated', function(data) { 

       /*I'm using a mootools javascript framework and my string below contain an error: 
       Uncaught TypeError: Cannot call method 'empty' of null*/ 

       var container = document.getElement('cart_contents_data'); 
       container.empty();  
      }); 

      } catch(err) {console.log(err)} 

    </script> 

但這種方法並不能幫助我。 謝謝。

回答

1

試試這個代碼,而不是:

window.addEvent('Updated', function(data) { 
    try { 
     var container = document.getElement('cart_contents_data'); 
     container.empty();  
    } catch(err) { 
     console.log(err); 
    } 
}); 

甚至更​​好,避免異常都:

window.addEvent('Updated', function(data) { 
    var container = document.getElement('cart_contents_data'); 
    if (container != null) { 
     container.empty();  
    } 
}); 

的問題是,代碼window.addEvent(....)只註冊事件處理程序。實際事件發生在後者,可能是由JavaScript框架引發的。發生異常時發生的事件是已被觸發,而不是在註冊時導致您的try-catch塊根本無法工作。

將函數內部的try-catch塊移動是一種可能的解決方法,但在您的情況下,似乎原因足夠小以避免使用簡單的if檢查。它提供了更好的性能並改善了代碼的可讀性。

+0

我知道你的代碼工作。但我需要解決方案來隔離模塊代碼。可能嗎? – user889349

+0

你是什麼意思的模塊。你使用requirejs或任何AMD模塊框架的Javascript?如果是這樣,請將其添加到您的問題(使用編輯按鈕) –

+0

沒有隻是結構。 – user889349