国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目次
または私たち…?
ActiveXオブジェクト
JavaScriptを使用してモバイルデバイスを検出する方法は?
feature.jsとは何ですか?また、機能の検出にどのように役立ちますか?
Modernizrとは何ですか?機能の検出にどのように役立ちますか?
機能検出にデバイスセクター-JSパッケージを使用するにはどうすればよいですか?
機能検出を?qū)g裝するためのベストプラクティスは何ですか?
ホームページ ウェブフロントエンド jsチュートリアル JavaScript機能の検出が失敗したとき

JavaScript機能の検出が失敗したとき

Feb 22, 2025 am 09:57 AM

When JavaScript Feature Detection Fails

キーポイント

  • JavaScript機能検出(プログラマーが使用したいテスト機能)は、常に信頼できるとは限りません。たとえば、Ajax要求のインターネットエクスプローラーでActiveXObjectをテスト、HTML屬性はDOMプロパティにマッピングされた屬性、ユーザーの動作(タッチデバイスの検出など)に関する仮定などです。
  • 機能検出に失敗すると、ブラウザの検出が必要な場合があります。ただし、ナビゲーター情報の代わりに獨自のオブジェクトテストを使用し、それを使用してブラウザを含めるのではなく除外することをお勧めします。
  • ブラウザ検出を?qū)g裝する場合は非常に注意してください。フィーチャテストと完全に一致していると仮定し、特徴が予想どおりに機能しないことがわかっている場合にのみブラウザ検出を求めてください。さらに、オブジェクトと機能テストに使用される構(gòu)文は、検出の成功率に影響を與える可能性があるため、適切な構(gòu)文を選択することが重要です。

昔々、ブラウザ検出はJavaScriptプログラマーの最高のスキルでした。一部の機能がIE5で機能しますが、Netscape 4では機能しないことがわかっている場合は、ブラウザをテストし、それに応じてコードを変更します。たとえば、

if (navigator.userAgent.indexOf('MSIE 5') != -1) {
  // 我們認為此瀏覽器是 IE5
}

しかし、私が最初に業(yè)界に參加したとき、武器競爭はすでに始まっていました!ベンダーはユーザーエージェント文字列に追加の値を追加しているため、競合他社のブラウザや獨自の値のように見えます。たとえば、これはMacのSafari 5です:

<code>Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.59.10 (KHTML, like Gecko) Version/5.1.9 Safari/534.59.10</code>
これは、「Safari」、「WebKit」、および「KHTML」のテスト(WebKitの基礎(chǔ)となるKonquerorコードベース)と一致します。 Mozilla ""(歴史的な理由から、ほとんどすべてのブラウザがMozillaであると主張しています)。

これらすべての値を追加する目的は、ブラウザ検出を回避することです。スクリプトがF(xiàn)irefoxのみが特定の機能を処理できると想定している場合、Safariは機能しても除外される場合があります。ユーザーがユーザーエージェントを自分で変更できることを忘れないでください。ブラウザを設(shè)定して「GoogleBot/1.0」を認識して、サイト所有者がクロールのみを使用すると思うものにアクセスできるようにしました。

したがって、時間が経つにつれて、この種のブラウザの検出は不可能な混亂になり、ほとんどが使用されていないため、より良いものに置き換えられています。

機能検出は、使用する機能をテストするためだけです。たとえば、

(ビューポートに対する要素の位置を取得する)が必要な場合、ブラウザではなく、ブラウザがサポートされるかどうかが重要ですテスト機能自體よりも悪い:getBoundingClientRect この関數(shù)をサポートしていないブラウザは、「未定義の」タイプを返すため、條件は渡されません。特定のブラウザでスクリプトをテストすることなく、正しく機能するか、靜かに失敗することがわかります。

または私たち…?

しかし、真実は - 機能検出が完全に信頼できるわけではありません - 時には失敗することがあります。それでは、今すぐいくつかの例を見て、各ケースを解決するためにできることを見てみましょう。

ActiveXオブジェクト

おそらく、機能検出障害の最も有名な例は、インターネットエクスプローラーでのAJAX要求のActiveXObjectをテストすることです。

ActiveXは後期のオブジェクトの例であり、実際的に重要なのは、を使用しようとするまで

if (navigator.userAgent.indexOf('MSIE 5') != -1) {
  // 我們認為此瀏覽器是 IE5
}
をサポートしているかどうかがわからないことです。したがって、ユーザーがActiveXを無効にした場合、次のコードにエラーが発生します。

これを修正するには、例外ハンドリングを使用する必要があります - オブジェクトをインスタンス化する必要がありますcatch fielures>それに応じて処理します。

<code>Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.59.10 (KHTML, like Gecko) Version/5.1.9 Safari/534.59.10</code>
html屬性はdom屬性

にマッピングされました

屬性マッピングは、HTML5プロパティで使用されるAPIのサポートをテストするためによく使用されます。たとえば、ドラッグ可能なプロパティを探すことにより、

の要素がDraggable APIをサポートするかどうかを確認します。 [draggable="true"]

ここでの問題は、IE8以前がすべての
if (typeof document.documentElement.getBoundingClientRect != "undefined") {
  // 瀏覽器支持此函數(shù)
}
HTMLプロパティをDOMプロパティに自動的にマッピングすることです。これが、これらの古いバージョンでは

が非常に混亂している理由です。なぜなら、プロパティをまったく返すのではなく、DOMプロパティを返すからです。 これは、getAttribute屬性を既に持っている要素を使用する場合を意味します:

それから、それらがサポートされていなくても、IE8以前はに対して

を返します。
if (typeof window.ActiveXObject != "undefined") {
  var request = new ActiveXObject("Microsoft.XMLHTTP");
}

屬性は何でもできます:true ("draggable" in element)

しかし、結(jié)果は同じです-IE8以前は

に対して

を返します。
if (typeof window.ActiveXObject != "undefined") {
  try {
    var request = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (ex) {
    request = null;
  }
  if (request !== null) {
    //... 我們有一個請求對象
  }
}

この場合、解決策は、テストの屬性を持たない要素を使用することです。最も安全な方法は、作成された要素を使用することです。 true ユーザーの動作に関する仮定("nonsense" in element)

次のコードを使用してタッチデバイスを検出したことがあるかもしれません:

if ("draggable" in element) {
  // 瀏覽器支持拖放
}
ほとんどのタッチデバイスは、クリックイベント(通常は約300ミリ秒)をトリガーする前に手動の遅延を?qū)g裝します。これは、クリック中に要素をクリックしないようにするためです。しかし、これによりアプリケーションが遅くて反応しないと感じるため、開発者はこの機能テストを使用してイベントを分岐することがあります。

ただし、この條件は、

- デバイスがタッチをサポートするため、タッチが使用されるため、

誤差に由來します。しかし、タッチスクリーンラップトップはどうですか?ユーザーは畫面に觸れているか、上記のコードを使用できないため、マウスでクリックすることは何も実行できません。
<div draggable="true"> ... </div>
この場合、ソリューションはイベントサポートをまったくテストすることではありません - 代わりに2つのイベントを同時にバインドしてから、

を使用して、タッチがクリックを生成するのを防ぎます。

if (navigator.userAgent.indexOf('MSIE 5') != -1) {
  // 我們認為此瀏覽器是 IE5
}
まったく機能しないもの

これが苦痛であることを認めるが、テストする必要がないことは機能ではないことがあります - ではなく、ブラウザ - 特定のブラウザが機能しないものをサポートすると主張しているためです。最近の例は、Opera 12のsetDragImage()です(オブジェクトをドラッグアンドドロップする方法です)。 dataTransfer

機能テストは、エラーを投げかけないため、オペラ12がそれをサポートすると主張しているためです。うまくいかないだけです:

<code>Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.59.10 (KHTML, like Gecko) Version/5.1.9 Safari/534.59.10</code>
さあ、

を試してカスタムドラッグイメージを追加し、デフォルト値をサポートなしで喜んで保持したい場合(これは起こります)、これは問題ないかもしれません。ただし、アプリケーションがカスタム畫像が必要な場合は、まったく異なる実裝を使用する必要があるように(つまり、カスタムJavaScriptを使用してすべてのドラッグ動作を?qū)g裝)する必要がある場合はどうなりますか?

またはブラウザが特定の機能を?qū)g裝しているが、避けられないレンダリングエラーがある場合はどうなりますか?問題のあるブラウザを明示的に検出し、使用をサポートしようとした機能から除外する以外に選択肢がない場合があります。

問題は、ブラウザ検出を達成するための最も安全な方法は何ですか?

2つの提案があります

    ナビゲーター情報よりも獨自のオブジェクトテストを好む。
  1. これを使用して、ブラウザを含めるのではなく除外します。
  2. たとえば、
オブジェクト検出オペラを12以前に使用できるため、この除外を使用してドラッグ可能なサポートをテストできます。

新しいブラウザがリリースされた場合、テスト結(jié)果が変更される可能性は低いため、標準オブジェクトの代わりに獨自のオブジェクトを使用する方が良いです。これが私のお気に入りの例のいくつかを紹介します:window.opera

if (typeof document.documentElement.getBoundingClientRect != "undefined") {
  // 瀏覽器支持此函數(shù)
}
オブジェクトテストは、特定のブラウザの特定の機能のサポートを決定するために、または緊急の場合のより正確なブラウザ條件を定義するために、機能テストと組み合わせて使用??することもできます。

ユーザーエージェントの文字列は信頼できない混亂であることに気付きましたが、ベンダーの文字列は実際には非常に予測可能であり、ChromeまたはSafariを確実にテストするために使用できます。
if (typeof window.ActiveXObject != "undefined") {
  var request = new ActiveXObject("Microsoft.XMLHTTP");
}

これらすべての黃金律は非常に注意することです??赡埭氏蓼甓啶违芝楗Ε钉菞l件をテストし、順方向の互換性を慎重に検討してください。目標は、ブラウザの條件を使用して

ブラウザを除外することです。既知の機能(これは機能テストの目的です)
if (typeof window.ActiveXObject != "undefined") {
  try {
    var request = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (ex) {
    request = null;
  }
  if (request !== null) {
    //... 我們有一個請求對象
  }
}

基本的に、機能テストが完全に一致していると常に仮定します - これが當てはまらないことがわからない限り、機能は予想どおりに機能します。

if ("draggable" in element) {
  // 瀏覽器支持拖放
}
テスト構(gòu)文を選択

を選択します 終了する前に、オブジェクトとプロパティテストに使用できるさまざまなタイプの構(gòu)文をチェックしたいと思います。たとえば、近年、次の構(gòu)文が一般的になりました。

if (navigator.userAgent.indexOf('MSIE 5') != -1) {
  // 我們認為此瀏覽器是 IE5
}

IE5とその同様の製品が構(gòu)文のためにエラーを投げるため、過去に使用することはできませんでした。

本質(zhì)的に、それは次のものとまったく同じですが、書く方が短いです:

<code>Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.59.10 (KHTML, like Gecko) Version/5.1.9 Safari/534.59.10</code>
ただし、テスト條件は通常、自動型変換に依存しています:

if (typeof document.documentElement.getBoundingClientRect != "undefined") {
  // 瀏覽器支持此函數(shù)
}
この構(gòu)文をいくつかのブラウザオブジェクトテスト(例:

テスト)の早い段階で使用しました。これは、オブジェクトの評価方法のために安全です - 定義されたオブジェクトまたは関數(shù)は常に真であると評価され、定義されていない場合、偽として評価されます。 window.opera

しかし、nullまたは空の文字列を効果的に返すものをテストしている可能性がありますが、どちらもfalseに評価されます。たとえば、

屬性は、IE6を除外するために時々使用されることがあります:style.maxWidth

if (typeof window.ActiveXObject != "undefined") { var request = new ActiveXObject("Microsoft.XMLHTTP"); }

屬性maxWidthがサポートされ、に著者が定義された値を持っている場合にのみTrueに評価されます。したがって、このようなテストを書くと、失敗する可能性があります。

一般的なルールは次のとおりです。自動型変換に依存することは、オブジェクトや関數(shù)にとって安全ですが、nullの文字列や數(shù)字または値に対して必ずしも安全ではありません。
if (typeof window.ActiveXObject != "undefined") {
  try {
    var request = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (ex) {
    request = null;
  }
  if (request !== null) {
    //... 我們有一個請求對象
  }
}
言われていると言われている - 安全に使用できる場合は、通常、最新のブラウザーではるかに高速であるため(おそらくこのタイプの狀態(tài)に最適化されているため)。

これの詳細については、現(xiàn)実世界での自動タイプ変換を參照してください。

JavaScript機能検出に関するよくある質(zhì)問

JavaScript機能の検出とは何ですか?なぜそれが重要なのですか?

JavaScript機能検出は、ユーザーのブラウザが特定の機能またはAPIをサポートするかどうかを判斷するために開発者が使用するテクノロジーです。これは、すべてのブラウザがJavaScriptのすべての機能をサポートしているわけではないため、重要です。機能検出を使用することにより、開発者はサポートされていない機能に代替ソリューションまたはフォールバックを提供し、さまざまなブラウザーでWebサイトまたはアプリケーションが正しく実行されるようにします。これにより、ユーザーエクスペリエンスが向上し、互換性が保証されます。

JavaScriptの特徴検出はどのように失敗しますか?

javaScript機能検出は、いくつかの理由で失敗する場合があります。よくある理由は、機能検出コードが誤って実裝されていることです。たとえば、コードがオブジェクトに存在しないプロパティをチェックすると、未定義に戻り、偽ネガになります。もう1つの理由は、ブラウザの癖やエラーである可能性があります。これにより、機能検出が不正確な結(jié)果をもたらす可能性があります。

機能検出とブラウザ検出の違いは何ですか?

機能検出には、ユーザーのブラウザが特定の機能をサポートするかAPIをサポートするかどうかを確認し、ブラウザー検出はユーザーのブラウザとバージョンを認識します。どちらの手法も互換性と機能を確保するように設(shè)計されていますが、ブラウザの種類やバージョンに基づいてサポートを想定するのではなく、機能を直接チェックするため、機能の検出はより良い練習と見なされることがよくあります。

JavaScriptを使用してモバイルデバイスを検出する方法は?

JavaScriptのnavigator.userAgent屬性を使用して、モバイルデバイスを検出できます。このプロパティは、ブラウザのユーザーエージェントヘッダーを表す文字列を返します。この文字列の特定のキーワード(「Android」、「iPhone」、「iPad」など)をチェックすることにより、ユーザーがモバイルデバイスにいるかどうかを判斷できます。

feature.jsとは何ですか?また、機能の検出にどのように役立ちますか?

feature.jsは、機能検出のための軽量で高速でシンプルなJavaScriptユーティリティです。使用者がブラウザが特定の機能をサポートするかどうかをテストできるようにする使いやすいAPIを提供します。これにより、サポートされていない機能のバックアップソリューションまたは代替ソリューションを提供することで、Webサイトまたはアプリケーションの互換性と機能を強化します。

Modernizrとは何ですか?機能の検出にどのように役立ちますか?

Modernizrは、開発者が古いブラウザーとの互換性を維持しながら、開発者がHTML5およびCSS3機能を活用するのに役立つJavaScriptライブラリです。機能検出を使用して、ブラウザが特定の機能をサポートし、HTML要素にクラスを追加するかどうかを確認し、StyleSheetsまたはJavaScriptの特定のブラウザ機能を見つけることができます。

機能検出にデバイスセクター-JSパッケージを使用するにはどうすればよいですか?

Device-Detector-JSパッケージは、デバイス検出のための強力なツールです。ユーザーエージェントの文字列を解析し、スマートフォン、タブレット、デスクトップ、テレビ、その他のデバイスを検出します。また、ブラウザ、エンジン、オペレーティングシステム、およびその他の有用な情報を検出します。このパッケージを使用して、検出されたデバイスに基づいてWebサイトまたはアプリケーションの動作を調(diào)整できます。

機能検出を?qū)g裝するためのベストプラクティスは何ですか?

機能検出を?qū)g裝するためのいくつかのベストプラクティスには、次のものが含まれます:Modernizrやfeature.jsなどの信頼性の高いテスト済みライブラリ、さまざまなブラウザーやデバイスで機能検出コードを徹底的にテストします。ブラウザのタイプまたはバージョンに基づいています。

機能検出は、ウェブサイトのパフォーマンスを改善するのに役立ちますか?

はい、機能検出はウェブサイトのパフォーマンスを改善するのに役立ちます。サポートされていない機能を検出し、代替ソリューションまたはフォールバックソリューションを提供することにより、不必要なコードがブラウザで実行されるのを防ぐことができます。これにより、読み込み時間が短縮され、Webサイトの全體的なパフォーマンスが向上します。

さまざまなブラウザでサポートされている最新の機能を理解する方法は?

Web開発の急速な発展の結(jié)果、さまざまなブラウザーでサポートされている最新の機能を理解するのは難しい場合があります。ただし、Mozilla Developer Network(MDN)などのリソースを使用できます。JavaScriptドキュメントは、さまざまなブラウザーの機能サポートに関する最新情報を提供できます。

以上がJavaScript機能の検出が失敗したときの詳細內(nèi)容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

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 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Java vs. JavaScript:混亂を解消します Java vs. JavaScript:混亂を解消します Jun 20, 2025 am 12:27 AM

JavaとJavaScriptは異なるプログラミング言語であり、それぞれ異なるアプリケーションシナリオに適しています。 Javaは大規(guī)模なエンタープライズおよびモバイルアプリケーション開発に使用されますが、JavaScriptは主にWebページ開発に使用されます。

JavaScriptコメント:短い説明 JavaScriptコメント:短い説明 Jun 19, 2025 am 12:40 AM

JavaScriptcommentsEareEssentialential-formaining、およびGuidingCodeexecution.1)single-linecommentseared forquickexplanations.2)多LinecommentsexplaincomplexlogiCorprovidededocumentation.3)clarifyspartsofcode.bestpractic

JSで日付と時間を操作する方法は? JSで日付と時間を操作する方法は? Jul 01, 2025 am 01:27 AM

JavaScriptで日付と時間を処理する場合は、次の點に注意する必要があります。1。日付オブジェクトを作成するには多くの方法があります。 ISO形式の文字列を使用して、互換性を確保することをお勧めします。 2。時間情報を取得および設(shè)定して、メソッドを設(shè)定でき、月は0から始まることに注意してください。 3.手動でのフォーマット日付には文字列が必要であり、サードパーティライブラリも使用できます。 4.ルクソンなどのタイムゾーンをサポートするライブラリを使用することをお勧めします。これらの重要なポイントを習得すると、一般的な間違いを効果的に回避できます。

なぜの下部にタグを配置する必要があるのですか? なぜの下部にタグを配置する必要があるのですか? Jul 02, 2025 am 01:22 AM

PLACSTHETTHETTHE BOTTOMOFABLOGPOSTORWEBPAGESERVESPAGESPORCICALPURPOSESESFORSEO、userexperience、andDesign.1.IthelpswithiobyAllowingseNStoAccessKeysword-relevanttagwithtagwithtagwithtagwithemaincontent.2.iTimrovesexperiencebyepingepintepepinedeeping

JavaScript vs. Java:開発者向けの包括的な比較 JavaScript vs. Java:開発者向けの包括的な比較 Jun 20, 2025 am 12:21 AM

javascriptispreferredforwebdevelopment、whilejavaisbetterforlge-scalebackendsystemsandroidapps.1)javascriptexcelsininintingtivewebexperiences withitsdynAmicnature anddommanipulation.2)javaofferstruntypyping-dobject-reientedpeatures

JavaScript:効率的なコーディングのためのデータ型の調(diào)査 JavaScript:効率的なコーディングのためのデータ型の調(diào)査 Jun 20, 2025 am 12:46 AM

javascripthassevenfundamentaldatypes:number、string、boolean、undefined、null、object、andsymbol.1)numberseadouble-precisionformat、有用であるため、有用性の高いものであるため、but-for-loating-pointarithmetic.2)ストリングリムムット、使用率が有用であること

DOMでのイベントの泡立ちとキャプチャとは何ですか? DOMでのイベントの泡立ちとキャプチャとは何ですか? Jul 02, 2025 am 01:19 AM

イベントキャプチャとバブルは、DOMのイベント伝播の2つの段階です。キャプチャは最上層からターゲット要素までであり、バブルはターゲット要素から上層までです。 1.イベントキャプチャは、AddEventListenerのUseCaptureパラメーターをTrueに設(shè)定することにより実裝されます。 2。イベントバブルはデフォルトの動作であり、UseCaptureはfalseに設(shè)定されているか、省略されます。 3。イベントの伝播を使用して、イベントの伝播を防ぐことができます。 4.イベントバブルは、動的なコンテンツ処理効率を改善するためにイベント委任をサポートします。 5.キャプチャを使用して、ロギングやエラー処理など、事前にイベントを傍受できます。これらの2つのフェーズを理解することは、タイミングとJavaScriptがユーザー操作にどのように反応するかを正確に制御するのに役立ちます。

JavaとJavaScriptの違いは何ですか? JavaとJavaScriptの違いは何ですか? Jun 17, 2025 am 09:17 AM

JavaとJavaScriptは、異なるプログラミング言語です。 1.Javaは、エンタープライズアプリケーションや大規(guī)模なシステムに適した、靜的に型付けされ、コンパイルされた言語です。 2。JavaScriptは動的なタイプと解釈された言語であり、主にWebインタラクションとフロントエンド開発に使用されます。

See all articles