Javascript,仅在用户使用IE10时运行

Javascript,仅在用户使用IE10时运行,javascript,Javascript,我正在使用一个库,它可以在除IE10之外的所有浏览器上完美运行,其中一个按钮需要双击而不是1,因此我想创建一些JavaScript,它只在IE10上运行,当用户单击此按钮时,它会双击而不是单次,但我如何才能使它只在IE10中运行 编辑: 这是我遇到问题的代码: <p:fileUpload widgetVar="upload" id="upload" fileUploadListener="#{fileUploadController.handleFileUpload}"

我正在使用一个库,它可以在除IE10之外的所有浏览器上完美运行,其中一个按钮需要双击而不是1,因此我想创建一些JavaScript,它只在IE10上运行,当用户单击此按钮时,它会双击而不是单次,但我如何才能使它只在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和I.E.7-9只有I.E.10具有isse,当您单击上载时,需要双击,无论您做什么-不要尝试嗅探用户代理。改用特征检测

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

不确定您实际要检测的是什么,因此我无法更具体地了解要检测的功能,但这就是我的想法

我喜欢以下方式:

首先在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]-->

但正如其他人所提到的,浏览器检测很少是处理此类事情的好方法。最好是检测功能支持

如果这是由IE 10中的一个错误引起的,并且你不能通过更改代码以一种好的方式解决它,我建议你改为让IE使用一个旧的引擎,只需将这个标签放在
标题
部分,你就可以用IE 7、8或9的错误/功能集替换IE 10的错误/功能集:

<meta http-equiv="X-UA-Compatible" content="IE=8">

虽然Internet Explorer 10确实不再支持HTML格式,但IE10 JScript引擎仍然支持一种不太广泛使用的功能,即“”

/*@cc_on

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

@*/
如您所见,所有其他浏览器都会将其解析为
/**/多行注释,忽略IE特定代码

当与功能检测结合使用时,条件编译提供了一种非常强大的方法来缩小IE版本检测的范围

更有可能的是,这听起来像是您正在使用的库中的一个bug。考虑将bug报告给PrimeFooS库的作者,而不是在其周围进行黑客攻击。 如果这是一个库错误,并且您在IE10中遇到了单击与双击的问题,那么纯功能检测可能不会产生最合适的结果,因为您将尝试检测不相关的功能。“onclick”和“ondblclick”DOM0事件已经为IE提供了很长时间

此外,如果该按钮从IE11开始工作,那么通过检查HTML5/CSS3属性进行功能检测可能会导致难以挑出IE10,或者在最坏的情况下,触发误报。特别是在考虑从IE(8)的一个主要版本到下一个主要版本(9)的巨大变化时,您希望尽可能减少误报和检测不相关功能的威胁

请注意,与用户代理嗅探(通常不赞成)不同,JScript引擎不会面临与用户代理欺骗相同的风险。JScript引擎版本是硬编码的,通常只随Internet Explorer的每个主要版本更新。(…、6、7、8、9、10等)


因此,为了准确检测IE10并对您的软件进行未来验证,必须进行条件编译。

尝试使用CSS解决方案

    .fileinput-button input {
      -moz-transform : none !important;
      border : none !important;
      border-width : 0 !important;
      transform : translate(-300px, 0) scale(4) !important;
      font-size : 23px !important;
   }
检查生成的按钮类(fileinput按钮)并应用于它。在我的例子中,类名是
.file\u upload.


找到这个。这对我很有效。

我认为你在这方面走错了方向。关键是检测功能,而不是浏览器。IE10是一款功能强大的浏览器。如果出于某种原因,它不起作用,请尝试找到解决该特定问题的方法,而不是“呸,我只是为了IE而破解它”…在所有浏览器上都能完美工作,除了IE 10中的按钮需要双击而不是1…“对不起,这很可疑。你应该知道这是怎么回事,而不是试图用浏览器检测它。好的,谢谢,我添加了一段我有问题的代码,它是一个使用primefaces库上传的文件。如果需要双击,那么我建议在按钮上有一个不可见的、绝对定位的元素,和/或事件传播在某个单击处理程序中变得混乱。我敢打赌,有一个.click事件处理程序在第一次单击后解除绑定,允许第二次单击正确触发。这将无法检测IE10,因为IE10不支持条件注释,因此不会设置任何body类。这是由JSF捕获的,那么非IE浏览器呢?“它们不是都会被识别为IE10吗?”TimMedora是的,我犯了一个小错误。现在修好了
    .fileinput-button input {
      -moz-transform : none !important;
      border : none !important;
      border-width : 0 !important;
      transform : translate(-300px, 0) scale(4) !important;
      font-size : 23px !important;
   }