検索
ホームページウェブフロントエンドH5 チュートリアル一般的に使用される HTML5/CSS3 の新機能検出方法のサンプル コード共有

今後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 メソッドを呼び出して確認できます:

unction support_video_ogg(){    
var elem = document.createElement('video');    
return elem.canPlayType('video/ogg; codecs="theora"');
}function support_video_h264(){    
var elem = document.createElement('video');    
return elem.canPlayType('video/mp4; codecs="avc1.42E01E"');
}function support_video_webm(){    
var elem = document.createElement('video');    
return elem.canPlayType('video/webm; codecs="vp8, vorbis"');
}function support_audio_ogg(){    
var elem = document.createElement('audio');    
return elem.canPlayType('audio/ogg; codecs="vorbis"');
}function support_audio_mp3(){    
var elem = document.createElement('audio');    
return elem.canPlayType('audio/mpeg;');
}function support_audio_wav(){    
var elem = document.createElement('wav');    
return elem.canPlayType('audio/wav; codecs="1"');
}
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

function support_applicationCache(){    
return !!window.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 までご連絡ください。
H5コードの構成要素:キー要素とその目的H5コードの構成要素:キー要素とその目的Apr 23, 2025 am 12:09 AM

HTML5の重要な要素には、最新のWebページの構築に使用される、、,,,,などが含まれます。 1.ヘッドコンテンツを定義します。2。リンクをナビゲートするために使用されます。3。独立した記事のコンテンツを表します。4。ページコンテンツを整理します。5。サイドバーコンテンツを表示します。

HTML5およびH5:一般的な使用法の理解HTML5およびH5:一般的な使用法の理解Apr 22, 2025 am 12:01 AM

HTML5とHTML5の略語であるHTML5とH5の間に違いはありません。 1.HTML5はHTMLの5番目のバージョンであり、Webページのマルチメディア関数とインタラクティブ機能を強化します。 2.H5は、HTML5ベースのモバイルWebページまたはアプリケーションを参照するためによく使用され、さまざまなモバイルデバイスに適しています。

HTML5:現代のウェブのビルディングブロック(H5)HTML5:現代のウェブのビルディングブロック(H5)Apr 21, 2025 am 12:05 AM

HTML5は、W3Cによって標準化されたHyperText Markup言語の最新バージョンです。 HTML5は、新しいセマンティックタグ、マルチメディアサポート、フォームの強化、Web構造の改善、ユーザーエクスペリエンス、SEO効果を導入します。 HTML5は、Webページ構造をより明確にし、SEO効果をより良くするために、、、、、、などの新しいセマンティックタグを導入します。 HTML5はマルチメディア要素をサポートしており、サードパーティのプラグインは不要で、ユーザーエクスペリエンスと読み込み速度が向上します。 HTML5はフォーム関数を強化し、ユーザーエクスペリエンスを向上させ、フォーム検証効率を向上させるなどの新しい入力タイプを導入します。

H5コード:クリーンで効率的なHTML5の書き込みH5コード:クリーンで効率的なHTML5の書き込みApr 20, 2025 am 12:06 AM

クリーンで効率的なHTML5コードを書き込む方法は?答えは、タグのセマンティック、構造化されたコード、パフォーマンスの最適化、一般的な間違いを回避することにより、一般的な間違いを避けることです。 1.コードの読みやすさとSEO効果を改善するには、セマンティックタグなどを使用します。 2。適切なインデントとコメントを使用して、コードを構造化して読みやすいままにします。 3.不必要なタグを減らし、CDNを使用してコードを圧縮することにより、パフォーマンスを最適化します。 4.タグが閉じていないなどの一般的な間違いを避け、コードの有効性を確認してください。

H5:ウェブ上のユーザーエクスペリエンスをどのように強化するかH5:ウェブ上のユーザーエクスペリエンスをどのように強化するかApr 19, 2025 am 12:08 AM

H5は、マルチメディアサポート、オフラインストレージ、パフォーマンスの最適化により、Webユーザーエクスペリエンスを向上させます。 1)マルチメディアサポート:H5と要素は、開発を簡素化し、ユーザーエクスペリエンスを向上させます。 2)オフラインストレージ:WebStorageとIndexEdDBは、エクスペリエンスを改善するためにオフラインで使用できるようにします。 3)パフォーマンスの最適化:ウェブワーカーと要素は、パフォーマンスを最適化して帯域幅の消費を削減します。

H5コードの分解:タグ、要素、属性H5コードの分解:タグ、要素、属性Apr 18, 2025 am 12:06 AM

HTML5コードは、タグ、要素、属性で構成されています。1。タグはコンテンツタイプを定義し、などの角度ブラケットに囲まれています。 2。要素は、startタグ、内容、および内容などのエンドタグで構成されています。 3。属性は、開始タグのキー値のペアを定義し、ような関数を強化します。これらは、Web構造を構築するための基本ユニットです。

H5コードの理解:HTML5の基礎H5コードの理解:HTML5の基礎Apr 17, 2025 am 12:08 AM

HTML5は、最新のWebページを構築するための重要なテクノロジーであり、多くの新しい要素と機能を提供します。 1。HTML5は、Webページの構造とSEOを強化するなどのセマンティック要素を導入します。 2。プラグインなしのマルチメディア要素と埋め込みメディアをサポートします。 3.フォームは、新しい入力タイプと検証プロパティを強化し、検証プロセスを簡素化します。 4.オフラインおよびローカルストレージ機能を提供して、Webページのパフォーマンスとユーザーエクスペリエンスを向上させます。

H5コード:Web開発者向けのベストプラクティスH5コード:Web開発者向けのベストプラクティスApr 16, 2025 am 12:14 AM

H5コードのベストプラクティスには以下が含まれます。1。正しいDoctype宣言と文字エンコーディングを使用します。 2。セマンティックタグを使用します。 3。HTTPリクエストを削減します。 4.非同期負荷を使用します。 5。画像を最適化します。これらのプラクティスは、Webページの効率、保守性、ユーザーエクスペリエンスを向上させることができます。

See all articles

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 Mac版

SublimeText3 Mac版

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

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!