短い: 評価され、window.onerror のコンテキスト内から構文エラーを引き起こしたスクリプトのテキストを取得する方法を探しています。
長い: 完全なシナリオには、電話ギャップ アプリケーションと PushNotifications プラグインが含まれます。
プッシュ メッセージがデバイスに送信されると、window.onerror を使用して JavaScript エラーがキャッチされます。
"SyntaxtError: Expected token '}'" というテキストで、報告される行番号は 1 です (通常、EVAL
uated コードを扱う場合です。
プラグインがそのコードを実行する方法は、次を使用することです。
NSString * jsCallBack = [NSString stringWithFormat:@"%@(%@);", self.callback, jsonStr];
[self.webView stringByEvaluatingJavaScriptFromString:jsCallBack];
私は信じていますが、これが PhoneGap Build がプッシュしているコードであると 100% 確信しているわけではありません。
これself.callback
は私がプラグインに渡した文字列であり、jsonStr は (そうであると思われる) プッシュ メッセージを説明するオブジェクトです。
self.callback
最終的に文字列になるパラメーターとして渡そうとするとalert('a');//
、アラートが表示され、構文エラーは発生しませんでした。広告今、jsonStrが何に評価されるのかを理解しようとしているので、おそらくそれを回避する方法を見つけたり、何らかの形で自分のせいであるかどうかを判断したりできます(おそらく、プッシュ通知で送信しているコンテンツのためです....)
$('script')
また、おそらく stringByEvaluatingJavaScriptFromString が新しいスクリプト ブロックを生成することを期待して、ドキュメントのコレクションの最後の項目を調べようとしましたが、そうではないようです。
さらにwindow.onerrorで、呼び出し元を使用しようとしましたvar c=window.onerror.caller||window.onerror.arguments.caller;
が、これは未定義を返します。
前に述べたように、構文エラーが発生したときに評価されているスクリプトのブロック全体を把握することで、構文エラーの原因を正確に特定する方法についてのアイデアを探しています。