[英]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.