7

私はこれを数日間探してきましたが、これまでのところ、私が思いつくことができる最善のことは、以下のリストをチェックすることです. 特になりすましの可能性があるため、User-Agent に基づいてサポートを確認するのは本当に好きではありません。また、以下のリストが正しくない例を少なくとも 1 つ聞いたことがあります (下記参照)。

  • インターネットエクスプローラーですか?
  • WebKitですか?(しかし、モバイル Safari ではサポートされていないことを読みました)
  • オペラですか?
  • Gecko とバージョンは >= 1.9 ですか? (Firefox 3 以降を意味します)

JavaScript を介して直接サポートをテストすることに基づくより良い方法はありますか?それとも、これがサポートをテストする唯一の方法ですか?

4

4 に答える 4

9
var canEditContent= 'contentEditable' in document.body;
于 2009-12-10T16:31:49.313 に答える
7

特定の機能を確認する最善の方法は、次のように、それをサポートする必要があることがわかっている要素でその機能を実際にテストすることです。

if(element.contentEditable != null)
    // then it's supported

また

if(typeof(element.contentEditable) != 'undefined')
   // same thing.. but with typeof you can be more specific about the type of property you need to find
于 2009-12-10T16:32:04.150 に答える
2

私が思いついた私のシナリオ(あなたのものと同様)の最良の解決策は以下のとおりです。おそらく防弾ではありませんが、ほとんどの状況をカバーしています。

var ua = navigator.userAgent;
var android_version = ua.match(/Android ([0-9\.]+)/);
var div = document.createElement("DIV");

if( typeof(div.contentEditable) == 'undefined' ||
  (/(iPhone|iPod|iPad)/i.test(ua) && /OS [1-4]_\d like Mac OS X/i.test(ua)) ||
  (android_version!=null && parseFloat(android_version[1])<3 ) ||
  (/(Opera Mobi)/i.test(ua))
) {
  // doesn't support contenteditable
} else {
  // supports contenteditable
}

この jsFiddleでテストできます。

注意: ニーズと目的によっては、IE のバージョンも検出する必要がある場合があります。これは、contenteditable のサポートが ... 「理想的ではない」ためです :-) ほとんどの苦労は、スーパー ライブラリ Rangy.js によって処理されます。

于 2012-09-29T14:16:00.353 に答える