52

WordPressのプラグインを開発しています。ユーザー側 (テーマ) で jquery プラグインとしていくつかの jquery を使用します。問題は、他の autors によって作成された他のプラグインで JavaScript エラーが発生した場合、私のプラグインの JavaScript が実行に失敗することです。

そして最悪なのは、私のプラグインがエラー処理条件ステートメントで 100% 正常に動作しているにもかかわらず、人々が私のプラグインに深刻な問題があると考えていることです。しかし、実際には、他の WP プラグイン/テーマ作成者の JavaScript 構文エラーが原因です。

他の JS エラーを無視してプラグイン JS を実行し続ける方法はありますか? または、この問題を処理するための提案がありますか??

ここに画像の説明を入力

4

11 に答える 11

25

試す :

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

つまり、バグのあるスクリプトが実行される前にこれを含めることができる場合です。

于 2012-09-17T14:07:01.730 に答える
8

古いJavaScriptエラーは、現時点ではなく次回に多くの問題を引き起こす可能性があるため、修正する必要があります。

JavaScriptファイル/コードを一番上に置き(JSでエラーが発生する前に)、他のJavaScriptコードによってJavaScriptが影響を受ける前に呼び出します。

実行時にJavaScript例外を処理する必要がある場合、最良のオプションは

try { /* run js code */ } 
    catch (error){ /* resolve the issue or bug */ }
于 2012-08-31T16:28:12.730 に答える
4

errorイベントを使用してエラーを飲み込むことができるはずです。

$(window).error(function(e){
    e.preventDefault();
});

私はこれを試みたことがありませんが、理論的には機能するはずです。

これはおそらくあなたの問題に対する素晴らしい解決策ではないことに注意する必要があります。プラグインが他のプラグインに干渉している可能性があります。もちろん、エラーがあなた自身のせいではない可能性はありますが、一般的に言えば(公開されているプラ​​グインでは)そうではありません。

于 2012-08-31T16:52:02.090 に答える
4

私は同じ問題に遭遇しました。あなたが善良な市民であるときでさえ、あまりにも多くの仮定をし、あなたのページでJavaScriptエラーを引き起こすプラグインがたくさんあります。これらのエラーはプラグインとは何の関係もありません。

他のプラグインでエラーを処理しようとしても意味がありません。IMOは、自己完結型であるが、エラーに対して回復力がある方がよいでしょう。

私の場合、エラーによってjquery DOM readyイベントが停止し、JavaScriptの初期化コードが実行されませんでした。ただし、エラーの正確な形式は重要ではありません。解決策は、複数のイベントで発生することです。

私にとっての解決策は、jQueryDOMreadyイベントに依存することに加えてフォールバックを行うことでした。

  1. DOMreadyイベントで起動したいコードを独自の関数にラップしました-例:my_hardened_init_action();
  2. 1回だけ実行する関数my_hardened_init()を追加しました。初めて呼び出されたときにmy_hardened_init_action()を呼び出し、それ以降の呼び出しでは何もしません。
  3. WordPressフッターでmy_hardened_init()を呼び出すためのさまざまなメソッドを追加しました。私の場合、必要なのは2つだけです。まず、通常のjQuery DOM initを試しますが、単純なsetTimeout()にフォールバックします。そのため、JavaScriptが壊れているためにjQuery DOM initが起動しない場合、ページの読み込みが完了した直後にタイムアウトが発生します。

他に複数のフォールバックを追加できます。必要に応じて、ヘッダーにコードを追加することもできます。my_hardened_init()は1回しか実行されないため、トリガーする回数は何度でも試すことができます。

これは、他のさまざまな壊れたプラグインを使用する多数のクライアントサイトで機能しました。

お役に立てれば。

于 2012-12-31T07:10:30.347 に答える
2

どうwindow.onerrorですか?

https://developer.mozilla.org/en-US/docs/DOM/window.onerror

于 2012-09-11T01:52:56.633 に答える
1
<script>
var _z = console;
Object.defineProperty(window, 'console', {
    get: function(){
        if (_z._commandLineAPI) {
         return true;   
        }
        return _z;
    },
    set: function(val) {
        _z = val;
    }
});
</script>
于 2014-08-11T12:53:02.807 に答える
1

ページが実行されている場合。使用する:

$(window).error(function(e){
        e.preventDefault();
});  // IGNORE ALL ERROR JQUERY!

または使用:

window.onerror = function(){
   return true;
}  // IGNORE ALL ERROR JAVASCRIPT!
于 2014-07-28T16:28:01.433 に答える
0

プラグインへの呼び出しを入れます

try{
  ......
}
catch(e){

}
于 2012-09-22T04:22:10.560 に答える
0

通常の try catch ステートメントは、これらの種類のエラーには機能しません。

考えられる回避策:

jQuery の代わりに inline-css を使用して、バーを左にフロートさせます (プラグインの完全な機能が何であるかはわかりませんが、バーを左にフロートさせるだけなら、css を使用しないのはなぜですか?)

親ページでコードを実行しようとする非表示の iframe があります。失敗した場合は、(この iframe 内から) ユーザーにそれがあなたのせいではないことを警告します:)

于 2012-09-11T00:40:44.247 に答える
0

別のページで実行されるように、js を html オブジェクトに入れてみてください。メイン ページの js がオブジェクトと対話するために実行されない場合、これはおそらくあまり役​​に立ちません。遊ぶだけの何か。

于 2012-09-18T20:38:44.817 に答える