簡體   English   中英

遇到錯誤時阻止Javascript停止

[英]Prevent Javascript from Stopping when Error is Encountered

我們的產品在客戶的網站上插入一個腳本,有點像在線聊天框。

通常,客戶的網站都有錯誤的javascript,也會停止我們的代碼(瀏覽器會在遇到錯誤時停止執行)。 有沒有辦法讓我們的代碼仍然執行,即使控制台中有關於未定義的方法或變量之類的錯誤?

謝謝你的幫助。

簡短的回答是,你真的不能。

“解決方案”#1:您可以堅持要求您的第三方代碼在其他任何人之前運行。 在大多數情況下,這是不可能的,甚至是不可取的。

“解決方案”#2:您可以堅持第一方工程師將所有第三方代碼包裝在try/catch塊中。 但是,這個解決方案實際上並不能為您提供任何保證,因為第三方庫經常將額外的<script>標簽附加到頁面 - 這些不屬於try/catch范圍的“轄區”,其中包含創建此代碼的代碼/這些標簽。

“解決方案”#3:您可以完全在<iframe>的范圍內構建您的應用程序,從而完全避免此問題。 不幸的是,即使你非常聰明,你也會很快遇到跨域違規,第三方cookie限制等。 這很可能不會對你有用。

“解決方案”#4:您可以向您的客戶解釋該問題,讓他們要求其他第三方代碼干凈利落地運行。 我說這是一個“解決方案”,因為坦率地說,如果您的問題是如何避免這樣做 ,那么它不是您問題的“解決方案”。

不幸的是,選項#4是你最好的選擇。 如果您以同樣的方式觀察其他第三方圖書館“破解”可能會有所幫助:您可以告訴您的客戶“嘿,這不僅僅是我 - X,Y和Z都因為<其他第3名黨的圖書館>。“ 它可能會導致他們將熱量放在違規代碼上,這使得網絡對所有參與者來說都更加幸福。

正如其他人所說,在錯誤發生后繼續可能不是最好的事情,但你可以試試這個:

function ignoreerror()
{
   return true
}
window.onerror=ignoreerror();

更多細節在這里

每當發生JavaScript錯誤時都會觸發onerror事件(根據您的瀏覽器配置,您可能會看到彈出的錯誤對話框)。 這個錯誤事件被附加到窗口對象上,這是一個相當不尋常的避難場所,但有充分的理由。 它以這種方式附加,因此它可以監視頁面上的所有JavaScript錯誤,甚至是頁面部分中的錯誤。

Opera有一個包含更多細節的頁面

Browsers supporting window.onerror
Chrome 13+
Firefox 6.0+
Internet Explorer 5.5+
Opera 11.60+
Safari 5.1+

你不能從你的代碼中 - 他們需要使用try / catch來處理可疑的腳本。

您可以讓他們在他們的頁面中插入iframe而不是您嘗試使用script標記注入代碼,如下所示: http//jsfiddle.net/EzMGD/注意腳本如何拋出錯誤但我們仍然可以看到內容中的內容iframe中。 如果適用,iframe應該有助於使用彼此的變量。

<script>
    MeaningOfLife();
</script>

<iframe src="http://bing.com"></iframe>​

或者注入代碼,這是第一個或最后一個script

好吧,對我來說工作正常:

element = document.querySelector('.that-pretty-element');
if (element != null) {
    element.onclick = function () {
        alert(" I'm working beibi ;) ");
    }
}

querySelector()返回false ,因此,我們可以使用if's驗證

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM