0

ボタンを 1 つではなくダブルクリックする必要がある IE10 以外のすべてのブラウザーで完全に動作するライブラリを使用しているため、ユーザーがこのボタンをクリックして代わりにダブルクリックする IE10 でのみ実行される JavaScript を作成したいと考えています。単一ですが、IE10でのみ実行されるようにするにはどうすればよいですか。

編集 :

これは私が問題を抱えているコードです:

<p:fileUpload widgetVar="upload" id="upload" fileUploadListener="#{fileUploadController.handleFileUpload}"
                                  mode="advanced" 
                                  multiple="false" 
                                  update="messages Nav upload"
                                  label="Select File"
                                  sizeLimit="100000000" 
                                  allowTypes="/(\.|\/)(gif|jpe?g|png|doc|docx|txt|pdf|html)$/"
                                  auto="true"
                                  disabled="#{fileUploadController.uploadComplete}"
                                  /> 

テストされたすべてのブラウザ、Firefox、Chrome、Opera、Safrai、IE 7 - 9 のうち、IE10 のみに問題があり、アップロードをクリックするとダブルクリックが必要になります。

4

5 に答える 5

2

Internet Explorer 10 が HTML の条件付きコメントをサポートしなくなったのは事実ですが、IE10 JScript エンジンでまだサポートされている「条件付きコンパイル」と呼ばれるあまり使用されていない機能があります。

/*@cc_on

  @if (@_jscript_version >= 10)
    console.log("You are using IE10 or greater!");
  @end

@*/

ご覧のとおり、他のすべてのブラウザーはこれを/* ... */複数行のコメントとして解析し、IE 固有のコードを無視します。

条件付きコンパイルを機能検出と組み合わせて使用​​すると、IE のバージョン検出を絞り込む非常に強力な方法が提供されます。

おそらく、使用しているライブラリのバグのようです。ハッキングするのではなく、Primefaces ライブラリの作成者にバグを報告することを検討してください。

ライブラリのバグであり、IE10 でシングル クリックとダブル クリックに問題がある場合、純粋な機能検出では、無関係な機能を検出しようとするため、最適な結果が得られない可能性があります。「onclick」および「ondblclick」DOM0 イベントは、長い間 IE で利用可能でした。

さらに、ボタンが IE11 以降で機能する場合、HTML5/CSS3 属性をチェックすることによる機能検出により、IE10 を特定することが困難になるか、最悪の場合、誤検知を引き起こす可能性があります。特に、IE のあるメジャー バージョン (8) から次のメジャー バージョン (9) への劇的な変更を考慮すると、誤検出の脅威と無関係な機能の検出を可能な限り最小限に抑える必要があります。

ユーザー エージェント スニッフィング (一般的に嫌われている) とは異なり、JScript エンジンはユーザー エージェント スプーフィングなどの同じリスクにさらされていないことに注意してください。JScript エンジンのバージョンはハードコードされており、通常は Internet Explorer の各メジャー バージョンでのみ更新されます。(...、6、7、8、9、10 など)

したがって、IE10 を正確に検出し、ソフトウェアを将来的に保証するには、条件付きコンパイルが必須です。

于 2013-02-19T22:34:15.157 に答える
0

これがIE10のバグが原因で、コードを変更してもうまく解決できない場合は、代わりにIEに古いエンジンを使用するように依頼し、このタグをheadセクションに配置するだけで、 IE10のバグ/機能セットとIE7、8、または9のバグ/機能セット:

<meta http-equiv="X-UA-Compatible" content="IE=8">
于 2013-02-19T22:29:59.987 に答える
0

何をするにしても、ユーザー エージェントを傍受しようとしないでください。代わりに特徴検出を使用してください。

var isThisIeTen = document.getElementsByTagName("body")[0].style.msGrid;
if (isThisIeTen) { // that feature is present in IE10+, so yeah... }

実際に何を検出しようとしているのかわからないため、どの機能を検出するかについて具体的にはわかりませんが、それがアイデアです

于 2013-02-19T22:09:54.047 に答える
0

私はこれを次のようにするのが好きです:

最初に HTML でブラウザを検出します。

<!--[if lt IE 7 ]> <html class="ie6"> <![endif]-->
<!--[if IE 7 ]>    <html class="ie7"> <![endif]-->
<!--[if IE 8 ]>    <html class="ie8"> <![endif]-->
<!--[if IE 9 ]>    <html class="ie9"> <![endif]-->
<!--[if (gt IE 9)]><!--> <html class=""> <!--<![endif]-->

次に、JSを記述します

$(function () {
  var ie10 = true;
  if ($('html').is('.ie6, .ie7, .ie8')) {
      ie10 = false;
  }

  if (ie10) {
      // IE10 JS
  } else {
      // Other JS
  }
}

しかし、他の人が述べたように、ブラウザーの検出がそのような問題に対処する良い方法であることはめったにありません。関数のサポートを検出する方が良い

于 2013-02-19T22:11:52.937 に答える