web-dev-qa-db-ja.com

iOSで「フェッチ」を呼び出すと、JavaScript「TypeError:キャンセル」エラー

Sentryを使用してJSクライアントのエラーを記録していますが、TypeError: cancelledエラーがたくさんあります。 iOSでのみ発生します。 Googleで何も見つかりません。これはネイティブJavascriptエラーですか、それとも何か他のものですか?どういう意味ですか?

enter image description here

취소됨Abgebrochencanceladoなどの他の言語でも同様のエラーが発生します。これは、エラーがコードによって発生したのではないことを示しています。

36
Leo Jiang

fetch AP​​Iを使用している場合、iOS 11.1-12のAbortControllerおよびAbortSignalに問題がある可能性があります。これは、誰かがフェッチを中止しようとしたときにのみ発生しますリクエスト(これが必ずしもすべてのiOSユーザーに影響を与えるわけではなく、矛盾を説明する理由です)。

詳しく説明すると、iOS 11.1-12はDOMでAbortControllerAbortSignalを定義していますが、これらはスタブです ここを参照 。したがって、iOSで12以下のフェッチリクエストを中止しようとすると、リクエストは中止されず、何らかのエラーがスローされる可能性があります。

TypeErrorではなくAbortErrorであることを考えると、AbortControllerが適切に/完全に定義されていないことが問題であると思われます。

EDIT:さらに読むと、ブロックされたものであっても、iOSで失敗したfetchesTypeErrorエラーをスローすることを示しているようですフェッチ。上記のように、問題はインストールされた広告ブロッカー(たとえば、ジェイルブレイクされたiPhone)またはCORSの問題であり、iOSはTypeError- Webkit BugZillaをスローします。ディスカッション 。そのため、エラーの種類に集中すると、間違ったパスに進む可能性があります。

3
Oliver

イライラしますか?

最近、同じエラーが発生しました。ここで私たちのケースで何が起こっていたかです。ページが読み込まれると、更新ボタンが十字ボタンに変わります。このページの読み込み中に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

0
Sachin Gupta