目次
HTML5部分
ではなく、
さらに、以下のように、対応するメソッドがサポートされているかどうかを確認する、より厳密なチェック方法があります:
newattributs
New Attributes of input タグ: autocomplete、autofocus、list、placeholder、max、min、multiple、pattern、required、step サポートされているかどうかを確認するには、上記の方法 2 を使用して新しい input タグを作成し、これらの属性があるかどうかを確認します。例として autocomplete を取り上げます。 :
history
webgl
postMessage
draggable
webSocket
svg
事件的支持性判断
通用方法
touch事件
css3部分
3D变形
ホームページ ウェブフロントエンド H5 チュートリアル 一般的に使用される HTML5/CSS3 の新機能検出方法のサンプル コード共有

一般的に使用される HTML5/CSS3 の新機能検出方法のサンプル コード共有

Mar 21, 2017 pm 03:53 PM

今後H5を使うシーンはどんどん増えていくでしょうし、Web開発者にとっては嬉しいことですね。しかし、はっきりと見なければならない現実があります。それは、IE シリーズのブラウザが依然として IE8 と 9 を中心に大きなシェアを占めており、我が国の Windows 8.1 のユーザーはすでに IE10/11 を使用しているということです。国の状況により、IE6 と 7 にはまだ多くのものが残っています。 HTML5 開発を手放す場合、新機能サポートのテストは不可欠です。 1 つの方法は、navigator.userAgent または navigator.appName を使用してブラウザの種類とバージョンを検出することです。ただし、この方法は、ブラウザによっては徐々にサポートされているため、100% サポートしているとは言えません。そのうちのHTML5。さらに、IE11 は、UA の「MSIE」マークを削除し、appName を「Netspace」に変更し、chr ome リズムに偽装する、-webkit- というプレフィックスが付いた CSS 属性 をサポートし始めたという、ひどい動きをしました。したがって、HTML5/CSS3 サポートを検出するには、機能検出 (図形検出) または機能検出に依存することをお勧めします。この記事では、一般的に使用されている検出方法を紹介します。

補足: このメソッドは、IE11 を決定するために引き続き使用できます: /Trident/i.test(navigator.appVersion)、mustache から取得します。

HTML5部分

HTML5の新機能を検出するには主に以下の方法があります:

1. グローバルオブジェクト(ウィンドウまたはナビゲーター)に対応する属性名があるかどうかを確認する 2. 要素を作成し、要素 対応する属性はありますか? 3. 要素を作成し、要素にメソッド名があるかどうかを確認し、メソッドを呼び出して正しく実行できるかどうかを確認します。 4. 要素を作成し、対応する属性に値を割り当てます。要素の属性を取得し、この属性の値を取得して割り当てが有効かどうかを確認します。ブラウザによって動作が異なるため、いくつかの機能を検出する場合は、上記のメソッドを組み合わせて使用​​することがあります。共通の特徴を検出するメソッド:

canvas

function support_canvas(){    
var elem = document.createElement('canvas');    
return !!(elem.getContext && elem.getContext('2d'));
}
ログイン後にコピー

一般的には、canvas要素を作成してgetContext属性を確認することができますが、ブラウザによっては精度が十分ではないため、elemの実行結果を確認することができます。 getContext('2d') 再度。

canvas に関して、追加すべきことの 1 つは、fillText メソッドです。ブラウザは Canvas をサポートしていますが、canvas

API

にはいくつかの歴史的な理由があり、このメソッドがサポートされているかどうかはわかりません。 support fillText は以下の通りです:
function support_canvas_text(){    
var elem = document.createElement('canvas');    
var context = elem.getContext('2d');    
return typeof context.fillText === 'function';
}
ログイン後にコピー
video/audio

function support_video(){    
return !!document.createElement('video').canPlayType;
}function support_audio(){    
return !!document.createElement('audio').canPlayType;
}
ログイン後にコピー

ビデオとオーディオの書き込み方法は似ています。

ビデオ/オーディオでサポートされているリソース形式を検出するには、次のように canPlayType メソッドを呼び出して確認できます:

canPlayType の戻り値は

Boolean 型

ではなく、

string であることに注意してください。

、take 値は次のとおりです:

"おそらく": ブラウザーはこの形式を完全にサポートします "maybe": ブラウザーはこの形式をサポートする可能性があります

  • "": 空の文字列、それを示しますサポートされていません

  • localStorage

  • 一般に、次のように、グローバル オブジェクトに localStorage 属性があるかどうかを確認するだけです:
  • function support_localStorage(){    
    try {        
    return 'localStorage' in window && window['localStorage'] !== null;
          } 
        catch(e){        
        return false;
        }
    }
    ログイン後にコピー

    cookie
  • が無効になっている、またはプライバシー モードが設定されている一部のブラウザでは、属性を確認するかレポートを確認してくださいエラーが発生するため、try ステートメントを追加します。エラーが報告された場合は、サポートされていないと見なされます。

さらに、以下のように、対応するメソッドがサポートされているかどうかを確認する、より厳密なチェック方法があります:

function support_localStorage(){    
try {        
if('localStorage' in window && window['localStorage'] !== null){
            localStorage.setItem('test_str', 'test_str');
            localStorage.removeItem('test_str');            
            return true;
        }        
        return false;
    } 
    catch(e){        
    return false;
    }
}
ログイン後にコピー

webWorker

function support_webWorker(){    
return !!window.Worker;
}
ログイン後にコピー

applicationCache

geolocation

function support_geolocation(){    
return 'geolocation' in navigator;
}
ログイン後にコピー

input tag

newattributs

New Attributes of input タグ: autocomplete、autofocus、list、placeholder、max、min、multiple、pattern、required、step サポートされているかどうかを確認するには、上記の方法 2 を使用して新しい input タグを作成し、これらの属性があるかどうかを確認します。例として autocomplete を取り上げます。 :

function support_input_autocomplete(){   
 var elem = document.createElement('input');    
 return 'autocomplete' in elem;
}
ログイン後にコピー

さらに、list 属性は datalist タグと組み合わせて使用​​されるため、特別な注意を払う必要があります。そのため、チェックする際には、datalist タグが以下をサポートしているかどうかも確認する必要があります。
function support_input_list(){    
var elem = document.createElement('input');    
return !!('list' in elem && document.createElement('datalist') && window.HTMLDataListElement);
}
ログイン後にコピー

input タグの新しいタイプ

ここでのタイプは値を指します。新しい入力タイプの値には、検索、電話番号、URL、電子メール、日時、日付、月、週、時刻、日時ローカル、数値が含まれます。 、範囲、色。これらの値を検出するには、数値を例として、前述の方法 4 を使用する必要があります。
function support_input_type_number(){    
var elem = document.createElement('input');
    elem.setAttribute('type', 'number');    
    return elem.type !== 'text';
}
ログイン後にコピー

  这是一种较为简单的检查方法,因为严格来讲,浏览器会为不同的类型提供不同的外观或实现,例如chrome中range类型会长这样:

  

  我们要确切的知道浏览器为该类型提供了对应的实现,才可以认为是“支持的”,要从这个方面检测是有难度的,各浏览器实现都不一。下面贴出Modernizr中的一个实现,供参考:检测email类型的实现:

function support_input_type_email(){    var elem = document.createElement('input');
    elem.setAttribute('type', 'email');
    elem.value = ':)';    return elem.checkValidity && elem.checkValidity() === false;
}
ログイン後にコピー

  为email类型设置了一个非法的value,然后手动调用校验方法,如果返回false,说明浏览器提供了该类型的实现,认为是支持的。

history

  history虽说是HTML4就有的,但HTML5提供了新的方法,检测方法如下:

function support_history(){    return !!(window.history && history.pushState);
}
ログイン後にコピー

webgl

function support_webgl(){    return !!window.WebGLRenderingContext;
}
ログイン後にコピー

postMessage

function support_postMessage(){    return !!window.postMessage;
}
ログイン後にコピー

draggable

HTML5的拖拽特性:

function support_draggable(){    
var p = document.createElement('p');    
return ('draggable' in p) || ('ondragstart' in p && 'ondrop' in p);
}
ログイン後にコピー

webSocket

unction support_webSocket(){    
return 'WebSocket' in window || 'MozWebSocket' in window;
}
ログイン後にコピー

svg

function support_svg(){    
return !!document.createElementNS && !!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect;
}
ログイン後にコピー

事件的支持性判断

通用方法:

  检查事件的支持性,用上面提到的方法2就可以,创建一个元素,看元素上有没有对应的事件名称,下面是摘自Modernizr的实现:

isEventSupported = (function() {

      var TAGNAMES = {
        'select': 'input', 'change': 'input',
        'submit': 'form', 'reset': 'form',
        'error': 'img', 'load': 'img', 'abort': 'img'
      };

      function isEventSupported( eventName, element ) {

        element = element || document.createElement(TAGNAMES[eventName] || 'div');
        eventName = 'on' + eventName;

        // When using `setAttribute`, IE skips "unload", WebKit skips "unload" and "resize", whereas `in` "catches" those
        var isSupported = eventName in element;

        if ( !isSupported ) {
          // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element
          if ( !element.setAttribute ) {
            element = document.createElement('div');
          }
          if ( element.setAttribute && element.removeAttribute ) {
            element.setAttribute(eventName, '');
            isSupported = is(element[eventName], 'function');

            // If property was created, "remove it" (by setting value to `undefined`)
            if ( !is(element[eventName], 'undefined') ) {
              element[eventName] = undefined;
            }
            element.removeAttribute(eventName);
          }
        }

        element = null;
        return isSupported;
      }
      return isEventSupported;
    })()
ログイン後にコピー

View Code

touch事件

  如果仅仅是检查touch事件是否支持,就没必要写上面那么多东西了,可以简单书写如下:

function support_touch_event(){    
return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch);
}
ログイン後にコピー

  Mozilla还提供了一个媒体查询的语句用来检测touch的支持性:touch-enabled,可以在页面上插入一个带有此媒体查询的元素来判断是否支持touch事件

  不过我们做移动开发一般都只考虑webkit内核了,Mozilla的方式就不写了,如果需要请参考Modernizr源码。

css3部分

通用方法

  css3属性支持度的检测,主要通过上面方法提到的2和4来检查,不过我们要检查的是元素的style属性。另外一个要提的就是浏览器私有前缀,在现阶段我们用css3属性大部分是要写前缀的,因为各浏览器还未完全支持。我们用到的前缀有:-webkit-、-ms-、-o-、-moz-,至于前缀-khtml-,这是Safari早期使用的,现在基本也没有人再用它了,所以进行检测的时候就把它省去了。Modernizr移除了此前缀的检测,

  通用代码如下:

var support_css3 = (function() {
   var div = document.createElement('div'),
      vendors = 'Ms O Moz Webkit'.split(' '),
      len = vendors.length;
 
   return function(prop) {
      if ( prop in div.style ) return true;
 
      prop = prop.replace(/^[a-z]/, function(val) {
         return val.toUpperCase();
      });
 
      while(len--) {
         if ( vendors[len] + prop in div.style ) {
            return true;
         } 
      }
      return false;
   };
})();
ログイン後にコピー

View Code

3D变形

  css3 3D变形的检测稍微复杂些,首先要支持perspective属性,其次要支持transform-style的值为preserve-3d。用方法4的方式无法检测出来,需要借助媒体查询的方式,代码如下:

function support_css3_3d(){
    var docElement = document.documentElement;
    var support = support_css3('perspective');
    var body = document.body;
    if(support && 'webkitPerspective' in docElement.style){
        var style = document.createElement('style');
        style.type = 'text/css';
        style.innerHTML = '@media (transform-3d),(-webkit-transform-3d){#css3_3d_test{left:9px;position:absolute;height:3px;}}';
        body.appendChild(style);
        var div = document.createElement('div');
        div.id = 'css3_3d_test';
        body.appendChild(div);

        support = div.offsetLeft === 9 && div.offsetHeight === 3;

    }
    return support;
}
ログイン後にコピー

  需要借助上面定义好的support_css3方法来检测perspective。

  基本常用检测的就这些了,本文中一部分代码是网上搜来的,还有一部分是从Modernizr源码中抽离出来的。如文中叙述有误,欢迎指正

  在实际开发中,推荐直接使用Modernizr进行检测,它已经封装的非常漂亮了。但是如果你仅仅检测几个属性,或者不想因加载额外的库而浪费性能,就可以使用上述代码进行单个检测。

  先写这么多,以后有想到的再进行补充。

以上が一般的に使用される HTML5/CSS3 の新機能検出方法のサンプル コード共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

HTMLの表の境界線 HTMLの表の境界線 Sep 04, 2024 pm 04:49 PM

HTML の表の境界線に関するガイド。ここでは、HTML でのテーブルの境界線の例を示しながら、テーブル境界線を定義する複数の方法について説明します。

HTML のネストされたテーブル HTML のネストされたテーブル Sep 04, 2024 pm 04:49 PM

これは、HTML でのネストされたテーブルのガイドです。ここでは、テーブル内にテーブルを作成する方法をそれぞれの例とともに説明します。

HTML 左マージン HTML 左マージン Sep 04, 2024 pm 04:48 PM

HTML マージン左のガイド。ここでは、HTML margin-left の概要とその例、およびそのコード実装について説明します。

HTML テーブルのレイアウト HTML テーブルのレイアウト Sep 04, 2024 pm 04:54 PM

HTML テーブル レイアウトのガイド。ここでは、HTML テーブル レイアウトの値と例および出力について詳しく説明します。

HTML入力プレースホルダー HTML入力プレースホルダー Sep 04, 2024 pm 04:54 PM

HTML 入力プレースホルダーのガイド。ここでは、コードと出力とともに HTML 入力プレースホルダーの例について説明します。

HTML 内のテキストの移動 HTML 内のテキストの移動 Sep 04, 2024 pm 04:45 PM

HTML でのテキストの移動に関するガイド。ここでは、概要、マーキー タグが構文でどのように機能するか、および実装例について説明します。

HTML 順序付きリスト HTML 順序付きリスト Sep 04, 2024 pm 04:43 PM

HTML 順序付きリストのガイド。ここでは、HTML 順序付きリストと型の導入とその例についても説明します。

HTML の onclick ボタン HTML の onclick ボタン Sep 04, 2024 pm 04:49 PM

HTML オンクリック ボタンのガイド。ここでは、それらの紹介、動作、例、およびさまざまなイベントでの onclick イベントについてそれぞれ説明します。

See all articles