Opera 10のjQuery Formプラグインでajaxファイルのアップロードの問題を解決する

jQueryには、このような有名なフォームプラグインがあります。 フォームを非同期で送信するのに最適だと思います。

しかし、Opera 10で非同期にファイルを送信する場合、操作不能のため使用を放棄しなければなりませんでした。私の9番目のOperaではすべてがうまくいきました。

問題は普通ではありません。特定のサイズのファイル(最大80〜90kb)が正常にロードされます。 ただし、ファイルが大きい場合、コールバック関数( successerror )はトリガーされません。 この場合、ファイルはサーバーに正しくアップロードされますが、この瞬間はブラウザーからキャッチできなくなります。 IE、FireFox、Chromeでは、このような問題はありません。

2月19日に、プラグインの最新バージョンがリリースされ、 Operaのiframeに関する何らかの問題が修正されましたが、これは役に立ちませんでした。

インターネットで解決策を見つけたことがなく、自分で解決しました。 すべてがシンプルであることが判明しました。

jquery.form.jsファイルで「opera」という単語で検索し、次のように取得します。

var domCheckCount = 50 ;
.....
if (--domCheckCount) {
// in some browsers ( Opera ) the iframe DOM is not always traversable when
// the onload callback fires, so we loop a bit to accommodate
cbInvoked = 0;
setTimeout(cb, 100);
return;
}
log('Could not access iframe DOM after 50 tries.');
return;


Operaは一度にiframeにアクセスする時間がないため、これをループで実行しようとしています。 50回は明らかに十分ではありません。 大きな桁に変更しても問題はありません (実際、すべてはファイルサイズに依存します)。

しかし、別のことは興味深いです。 この問題は、プラグインの最新バージョンまで解決されません。
そして、ダウンロードしたファイルの特定のサイズでのみ出現する場合、とにかく、パフォーマンスの問題があると推測できます。そのため、尊敬されるプラグインの作成者であるマルサップはスキップできます

PSサイクルを無限に作り直すことができますが、このアクションの結果がどうなるかはわかりません。 domCheckCount = 200に設定し、これについてプラグイン作成者に書きました。

UPD:プラグインの作成者は私のリクエストでこの問題修正しました
UPD: プラグインの新しいバージョンがリリースされました
UPD:これまでのところ、問題は著者によって受動的に解決されています(変数domCheckCount = 100の値では不十分な場合があります)。このため、私はそれをJQueryブログに転送します。
記事のソースはここにあります。

Source: https://habr.com/ru/post/J85750/


All Articles