ブラウザがXMLHttpRequest.responseType = "arraybuffer"
をサポートしているかどうかを知りたい。問題は、iOS 4.2には部分的なxhr2サポートが含まれています(つまり、XMLHttpRequestUpload
は含まれていますが、responseType = "arraybuffer"
は含まれていないため、一部の一般的なxhr2サポートを再度テストすることはできません)。XMLHttpRequestがresponseType = "arraybuffer"をサポートするかどうかを検出する方法は?
答えて
あなたはこれを試しましたか?
if(typeof(XMLHttpRequestUpload) == "undefined"){
//not supported
}
編集
私はあなたがArrayBuffer
のこの
function IsArrayBufferSupported(){
var xhr = new XMLHttpRequest();
xhr.open('GET', '/', true);
try{
xhr.responseType = "arraybuffer";
return true;
}catch(e){return false;}
}
チェックが良い特徴検出する必要がありますのような厄介な気にいらで立ち往生するかもしれないと思います。
userAgentにはArrayBuffer
オブジェクトをサポートしている場合、それは、それが述べたようにしかし、それは機能テストではなく、特徴検出を行うのがベストだろうXHR2
で動作します可能性があります。私は、次を使用しています
function IsArrayBufferSupported(cb){
var xhr = new XMLHttpRequest();
xhr.open('GET', '/', true);
try {
xhr.responseType = "arraybuffer";
} catch (e){
return cb(false);
}
xhr.onload = function onload() {
if (ArrayBuffer.prototype.isPrototypeOf(this.response)) {
return cb(true);
}
cb(false);
}
xhr.send();
}
responseTypeがサポートされていない値に設定されている場合は、例外は発生しません。 –
@AronWoost私は例外が発生しないことを期待しています。したがって、戻り値の型チェックです。しかし、将来の校正コードでは、他のuserAgentが例外をスローする場合に 'try catch'を使用することは価値があります。 – Raynos
:
私はそのサポートにこれをテストしたすべてのブラウザでvar supported = typeof new XMLHttpRequest().responseType === 'string';
、responseTypeのデフォルト値は空の文字列(それは仕様で述べているだけのよう:http://www.w3.org/TR/XMLHttpRequest/#the-responsetype-attribute)です、 responseTypeをサポートしていないブラウザでは、属性の値は未定義です。
これは良いテストのようです。 Android 2.3では「未定義」、Android 4.xでは「文字列」を取得します。これは、http://caniuse.com/xhr2とよく似ています(iOS 4.2のように、Android 2.3はXMLHttpRequestUploadをサポートしているようです)、少なくとも "typeof(XMLHttpRequestUpload)"は "未定義"ではなく "function"を返します) –
設定"arraybuffer"
にresponseType
、それが新たな価値を持っているかどうかを確認:
// call like isResponseTypeSupported('arraybuffer')
function isResponseTypeSupported(responseType) {
var xhr = new XMLHttpRequest();
xhr.open('GET', '/');
try {
xhr.responseType = responseType;
} catch (e) {
return false;
}
return xhr.responseType === responseType;
}
IE6 'responseType'がサポートされているかどうかをチェックしないからです。 – Hydro
Modernizrを使用したが、これはModernizr.xhr2
の下で覆われています。 部分的なサポートについてのコメントをフォローアップModernizr.dataviewさらに正確かもしれません。
(function(modernizr, ns){
ns.isSupported = (function(){
return modernizr.xhr2 && modernizr.dataview;
});
return ns;
}(window.Modernizr, window.NameSpace || {}));
私は両方の機能がサポートされることを期待しています。
"arraybuffer"
応答がサポートされているかどうかを検出したい場合は、グローバルオブジェクトに含まれているかどうかを確認するだけです。他の機能を検出したい場合は、""
を空にするか、エラーを投げるまでXHR().responseType
を割り当ててください。
function isAjaxResponseSupported(type) {
var xhr = new XMLHttpRequest;
/* Check if .responseType is supported first */
if (typeof xhr.responseType === 'string') {
/* Some browsers throw error for invalid .responseType */
try {
xhr.responseType = type;
// If they don't,
// check if .responseType is equal to @type.
return xhr.responseType === type;
} catch (e) {
return false;
}
; else return false;
}
- 1. XMLHttpRequest responseType = "json"エラーを返すSYNTAX_ERR:DOM Exception 12
- 2. モバイルデバイスがJ2ME WMAをサポートするかどうかを検出
- 3. jQuery $ .ajaxまたは$ .loadはresponseTypeのarrayBufferを許可しますか?
- 4. CPUがIntelの盗難防止技術をサポートしているかどうかを検出する方法は?
- 5. SSLがサポートされているかどうかを検出
- 6. 行がC#で交差するかどうかを検出する方法は?
- 7. ルータがマルチキャストをサポートしているかどうかを検出する
- 8. SVGサポートの検出方法はどれですか?
- 9. Surface ContactがScatterView上にあるかどうかを検出する方法は?
- 10. デバイスがjQuery Mobileでサポートされているかどうかを検出する
- 11. オーディオが大きすぎるかどうかを検出する方法?
- 12. actionmodeが既に存在するかどうかを検出する方法
- 13. シフトが解除されたかどうかを検出する方法は?
- 14. Windowsキーが押されたかどうかを検出する方法は?
- 15. アンドロイドアプリケーションで位置が有効かどうかを検出する方法は?
- 16. ユーザーがPHPでページを残すかどうかを検出する方法
- 17. iPhone:EKEventインスタンスを変更できるかどうかを検出する方法は?
- 18. 私のアプリケーションが閉じているかどうかを検出する方法
- 19. MemoryMappedFileが使用中であるかどうかを検出する方法
- 20. ページがポストバックの結果であるかどうかを検出する方法
- 21. メディアプレーヤーが動作しているかどうかを検出する方法
- 22. Zebraプリンタがインストールされているかどうかを検出する方法
- 23. Open Graph Protocol。 ifがFacebookであるかどうかを検出する方法
- 24. NSDrawerが画面から開くかどうかを検出する方法
- 25. プロセスが実行を完了したかどうかを検出する方法
- 26. モバイルブラウザがオーバーフローをサポートしているかどうかを検出:スクロール
- 27. UIスレッドであるかどうかを検出する方法は?
- 28. window.confirm()がサポートされているかどうかを確認する方法は?
- 29. 画像がタッチされたかどうかを検出する方法
- 30. NSURLConnectionのsendSynchronousRequest:returningResponse:エラーが終了したかどうかを検出する方法:
いいアイデア!しかし、私は、iOS 4.2のモバイルSafariにはXMLHttpRequestUploadが含まれていて、responseType = "arraybuffer"は含まれていない、部分的なxhr2サポートが既に存在していることに気付きました。私はそれに応じて質問を更新します。 –
responseTypeがサポートされていない値に設定されている場合、例外は発生しません。 –
申し訳ありません、Google Chromeのコンソールでこれをテストしてみました。 (機能IsArrayBufferSupported(){ するvar XHR =新しいXMLHttpRequestを(); xhr.open( '/'、 'GET'、TRUE); 試み{ XHR。responseType = "arraybuffer"; がtrueを返します。 }キャッチ(E){falseを返す;} })() >真 (関数IsArrayBufferSupported(){ VaRのXHRが=新規のXMLHttpRequest(); xhr.open( 'GET'、 '/'、真); 試み{ xhr.responseType = "badarg"; リターンはtrue、 }キャッチ(電子){falseを返す;}} )() >偽 –