Sentryを使用してJSクライアントのエラーを記録していますが、TypeError: cancelled
エラーがたくさんあります。 iOSでのみ発生します。 Googleで何も見つかりません。これはネイティブJavascriptエラーですか、それとも何か他のものですか?どういう意味ですか?
취소됨
、Abgebrochen
、cancelado
などの他の言語でも同様のエラーが発生します。これは、エラーがコードによって発生したのではないことを示しています。
fetch
APIを使用している場合、iOS 11.1-12のAbortController
およびAbortSignal
に問題がある可能性があります。これは、誰かがフェッチを中止しようとしたときにのみ発生しますリクエスト(これが必ずしもすべてのiOSユーザーに影響を与えるわけではなく、矛盾を説明する理由です)。
詳しく説明すると、iOS 11.1-12はDOMでAbortController
とAbortSignal
を定義していますが、これらはスタブです ここを参照 。したがって、iOSで12以下のフェッチリクエストを中止しようとすると、リクエストは中止されず、何らかのエラーがスローされる可能性があります。
TypeError
ではなくAbortError
であることを考えると、AbortController
が適切に/完全に定義されていないことが問題であると思われます。
EDIT:さらに読むと、ブロックされたものであっても、iOSで失敗したfetches
がTypeError
エラーをスローすることを示しているようですフェッチ。上記のように、問題はインストールされた広告ブロッカー(たとえば、ジェイルブレイクされたiPhone)またはCORS
の問題であり、iOSはTypeError
- Webkit BugZillaをスローします。ディスカッション 。そのため、エラーの種類に集中すると、間違ったパスに進む可能性があります。
イライラしますか?
最近、同じエラーが発生しました。ここで私たちのケースで何が起こっていたかです。ページが読み込まれると、更新ボタンが十字ボタンに変わります。このページの読み込み中にAPIリクエストが進行中で、ユーザーがこの十字ボタンをクリックすると、iOS chrome/safariがこのエラーをスローします。同じ状況で、FirefoxブラウザーはTypeError: NetworkError when attempting to fetch resource
およびchrome browser throughs TypeError: Failed to fetch
をスローします。
これは本当に心配すべき問題ではないので、私たちはセントリーのignoreErrors属性を使用して、セントリーにこのエラーを無視させることにしました。
Sentry.init({
dsn: "sentry_dsn",
ignoreErrors: [
'TypeError: Failed to fetch',
'TypeError: NetworkError when attempting to fetch resource.',
'TypeError: Cancelled'
],
});
注:
フェッチに失敗したのはCORSエラーによっても生成されます。これにも注意してください。また、sentryのbeforeSendコールバックを使用して、statusCodeが400〜426のエラーを無視することにしました。
このエラーを見つけるために何日も費やしました。これが誰かを助けることを願っています。
ありがとうございました
また、これはもともとここに書かれていました: https://forum.sentry.io/t/typeerror-failed-to-fetch-reported-over-and-overe/8447/2