当社の製品は、ライブチャットボックスのようなスクリプトをクライアントのWebサイトに挿入します。
多くの場合、クライアントのWebサイトにはバグのあるjavascriptがあり、コードも停止します(エラーが発生するとブラウザーは実行を停止します)。未定義のメソッドや変数などについてコンソールにエラーが発生した場合でも、コードを実行する方法はありますか?
ご協力いただきありがとうございます。
当社の製品は、ライブチャットボックスのようなスクリプトをクライアントのWebサイトに挿入します。
多くの場合、クライアントのWebサイトにはバグのあるjavascriptがあり、コードも停止します(エラーが発生するとブラウザーは実行を停止します)。未定義のメソッドや変数などについてコンソールにエラーが発生した場合でも、コードを実行する方法はありますか?
ご協力いただきありがとうございます。
簡単に言えば、あなたは本当にできないということです。
「解決策」#1:サードパーティのコードが他の誰よりも先に実行されるように主張することができます。ほとんどの場合、これは不可能であるか、望ましくさえありません。
「解決策」#2:try/catch
ファーストパーティのエンジニアがすべてのサードパーティのコードをブロックでラップするように主張することができます。ただし、サードパーティのライブラリがページに追加のタグを添付することが非常に多いため、このソリューションは実際には保証を購入しません。これらは、この/これらのタグを作成したコードを囲むスコープ<script>
の「管轄」には該当しません。try/catch
。
「解決策」#3:の範囲内でアプリを完全に構築できるため<iframe>
、問題を完全に回避できます。残念ながら、あなたが非常に賢い場合でも、クロスドメイン違反、サードパーティのCookie制限などにすぐに遭遇します。これはうまくいかない可能性が非常に高いです。
「解決策」#4:クライアントに問題を説明し、他のサードパーティのコードを正常に実行するようにクライアントに要求させることができます。率直に言って、あなたの質問がこれを正確に回避する方法である場合、それはあなたの質問に対する「解決策」ではないので、これは「解決策」であると私は言います。
残念ながら、オプション#4が最善の策です。他のサードパーティライブラリが同じように「壊れている」ことを観察すると役立つ場合があります。クライアントに「ねえ、それは私だけではありません。X、Y、Zもすべて<他のサードパーティの名前のために「壊れている」と言うことができます。パーティーライブラリ>。」それは彼らが問題のあるコードに熱を加える原因となる可能性があり、それはウェブを関係者全員にとってより幸せな場所にします。
他の人が言っているように、エラーの後に続行するのは最善の方法ではないかもしれませんが、これを試すことができます:
function ignoreerror()
{
return true
}
window.onerror=ignoreerror();
詳細はこちら
onerrorイベントは、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
を使用してコードを挿入する代わりに、ページにを挿入してもらうことができます。http: //jsfiddle.net/EzMGD/スクリプトがエラーをスローするのに、iframe内のコンテンツを表示できることに注目してください。該当する場合、iframeは他の変数を使用するのに役立ちます。script
<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