WordPress用のプラグインを開発しています。ユーザー側(テーマ)のjqueryをjqueryプラグインとして使用します。問題は、他のautorsによって作成された他のプラグインでjavascriptエラーがある場合、プラグインのjavascriptの実行が失敗することです。
そして最悪のことは、エラー処理の条件ステートメントで100%正常に機能するにもかかわらず、私のプラグインに重大な障害があると人々が考えることです。しかし、実際には、他のWP plugin/theme作成者の他のjavascript構文エラーが原因です。
他のJSエラーを無視してプラグインJSを実行し続ける方法はありますか。または、この問題を処理するための提案がありますか?
試してください:
window.onerror = function(){
return true;
}
これは、バグのあるスクリプトが実行される前にこれを含めることができる場合です。
古いJavaScriptエラーは多くの問題を引き起こす可能性があるため、今すぐではなく次回のために修正する必要があります。
JavaScriptファイル/コードを最上部(JSにエラーが発生する前)に配置し、他のJavaScriptコードの影響を受けるJavaScriptの前に呼び出します。
実行時にJavaScript例外を処理する必要がある場合、最適なオプションは
try { /* run js code */ }
catch (error){ /* resolve the issue or bug */ }
error
イベントを使用して、エラーを飲み込むことができるはずです。
$(window).error(function(e){
e.preventDefault();
});
私はこれを試みたことがありませんが、理論的にはうまくいくはずです。
これはおそらくあなたの問題に対する素晴らしい解決策ではないことに注意してください。プラグインが他のプラグインに干渉している可能性があります。もちろん、エラーはあなた自身の過失ではない可能性がありますが、一般的に言えば(公的にリリースされたプラグインで)そうではありません。
私は同じ問題に遭遇しました:あなたが善良な市民であっても、あまりにも多くの仮定を行い、あなたのページにJavaScriptエラーを引き起こすプラグインがたくさんあります。これらのエラーは、プラグインとは関係ありません。
他のプラグインでエラーを処理しようとする意味はありません。IMOは自己完結型であるがエラーに対する回復力がある方が良いです。
私の場合、エラーによりjquery DOM readyイベントが停止し、JavaScriptの初期化コードが実行されませんでした。ただし、エラーの正確な形式は重要ではありません。解決策は、複数のイベントを発生させることです。
私にとっての解決策は、jQuery DOM readyイベントに依存することに加えて、フォールバックを行うことでした。
他の複数のフォールバックを追加することができます-必要に応じてヘッダーにコードを追加することもできます。 my_hardened_init()は1回しか実行されないため、何度でもトリガーできます。
これは、他の一連の壊れたプラグインを備えた多数のクライアントサイトで機能します。
お役に立てれば。
window.onerror
?
ページが実行されている場合。つかいます:
$(window).error(function(e){
e.preventDefault();
}); // IGNORE ALL ERROR JQUERY!
または使用:
window.onerror = function(){
return true;
} // IGNORE ALL ERROR JAVASCRIPT!
<script>
var _z = console;
Object.defineProperty(window, 'console', {
get: function(){
if (_z._commandLineAPI) {
return true;
}
return _z;
},
set: function(val) {
_z = val;
}
});
</script>
プラグインを呼び出す
try{
......
}
catch(e){
}
おそらく、jsをhtmlオブジェクトに配置して、別のページで実行されるようにすることができます。メインページのjsがオブジェクトと対話するために実行しない場合、それはおそらくあまり役に立ちません。遊ぶだけの何か。
これは私のために働いています:
try{
//your code
}
catch(error)
{
return true;
}
これらのタイプのエラーでは、通常のtry catchステートメントは機能しません。
考えられる回避策:
JQueryの代わりにinline-cssを使用してバーを左にフロートします(プラグインの完全な機能はわかりませんが、バーを左にフロートするだけの場合は、cssを使用しないのはなぜですか?)
親ページでコードを実行しようとする非表示のiframeがあります。失敗した場合、それはあなたのせいではなかったことをユーザーに警告する(このiframe内から):)