1

水曜日に、Firefoxが「XMLHttpRequestのタイムアウト属性の使用はウィンドウコンテキストの同期モードではサポートされていません」と報告し始めたため、私が維持しているAJAXyCRMシステムは多くのユーザーのために壊れました。他の主要なブラウザは引き続き正常に動作するため、回避策としてFirefoxを使用しないようにアドバイスしました。

私が理解していることから、同期リクエストは悪いことです。そのため、Firefoxの最近のアップデートによって、悪いことへの対応が妨げられたとしか思えません。これまでのすべての議論(こことWeb上)は、同期XMLHttpRequestオブジェクトでのtimeout属性の使用がまったく機能しないことを示唆しているため、なぜそれが明らかに機能するのか疑問に思います(水曜日のFirefoxを除く)。

他のブラウザ/古いFirefoxは、実際には「すべきではない」タイムアウト動作を実装していますか、それとも(新しいFirefoxのようにベイルアウトするのではなく)例外を無視して実行を続行しますか?

編集:今はコードにアクセスできませんが、次の行に沿っていました: 「this」はおそらくXMLHTTPRequestから継承された複雑なものであり、「c」は特定のAJAXリクエストなどを参照する特定のオブジェクトです。Javascriptとこの特定のSugarベースのCRMの両方についてほとんど知らないことは明らかですが、コードの本質は単純でした。これは、リクエストを行うための一般的なオブジェクト指向の方法であり、この特定の4行ほどは、リクエストがタイムアウトしたときに処理されました。これは、特定のリクエスト(またはリクエストするエンティティ)が専門とする抽象的なベースであるという印象を受けます。FirefoxJavascriptエンジンがでチョークします。if (c.somekindoftimeouthandler !== "unassigned" && this.timeout) {
c.timeout = this.timeout
//more stuff about the handler etc...
}
this.timeout

私の質問の推力はもっと一般的だと思います-同期XHRにタイムアウトを使用することの「悪い点」を考えると、さまざまなブラウザはそれをどのように処理しますか?

4

1 に答える 1

3

IE では、同期 XHR で「タイムアウト」が機能します。タイムアウト時間に達すると、send() から例外がスローされると思います。

Firefox は、XHR 仕様が示すとおりに実装しました。非同期 XHR ではタイムアウトがサポートされていますが、同期 XHR ではサポートされていません (設定しようとするとスローされます)。

他のブラウザー (および古い Firefox) はタイムアウトをまったくサポートしていません。彼らは財産さえ持っていません。スクリプトはプロパティが存在するかどうかをスニッフィングしているため、他のブラウザーでタイムアウトを設定しようとさえしません。これがそこで機能する理由です。スクリプトは悪いことをしようとしていないため、それらのブラウザーは終了しません。例外をスローします。

つまり、変更されたのは、Firefox がタイムアウト プロパティのサポートを追加したことだけですが、IE が行うことを行う代わりに、仕様が行うように実装したことです。そして、あなたのスクリプトは、プロパティを実装するブラウザがIEと同じように動作すると想定していました...

于 2012-05-05T00:45:10.400 に答える