今後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. 要素を作成し、対応する属性に値を割り当てます。要素の属性を取得し、この属性の値を取得して割り当てが有効かどうかを確認します。ブラウザによって動作が異なるため、いくつかの機能を検出する場合は、上記のメソッドを組み合わせて使用することがあります。共通の特徴を検出するメソッド:
canvasfunction 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; }
ビデオとオーディオの書き込み方法は似ています。
Boolean 型ではなく、
string であることに注意してください。、take 値は次のとおりです:
"おそらく": ブラウザーはこの形式を完全にサポートします "maybe": ブラウザーはこの形式をサポートする可能性があります
"": 空の文字列、それを示しますサポートされていません
-
localStorage
一般に、次のように、グローバル オブジェクトに localStorage 属性があるかどうかを確認するだけです: function support_localStorage(){ try { return 'localStorage' in window && window['localStorage'] !== null; } catch(e){ return false; } }
が無効になっている、またはプライバシー モードが設定されている一部のブラウザでは、属性を確認するかレポートを確認してくださいエラーが発生するため、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; }
applicationCachefunction 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 サイトの他の関連記事を参照してください。

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

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

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

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

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

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

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

メモ帳++7.3.1
使いやすく無料のコードエディター

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