0

我正在使用一个在除 IE10 之外的所有浏览器上都能完美运行的库,其中一个按钮需要双击而不是 1,所以我想创建一些仅在 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、safari 和 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

whatever you do - don't try to sniff the user agent. Use feature detection instead!

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

Not sure what you're actually trying to detect, so I can't get more specific about which feature to detect, but that's the idea

于 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 回答
0

如果这是由 IE 10 中的错误引起的,并且您无法通过更改代码以很好的方式解决它,我建议您改为让 IE 使用较旧的引擎,只需将此标记放在该head部分中,您就可以替换IE 10 的错误/功能集与 IE 7、8 或 9 的错误/功能集:

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

试试这个 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-button)并应用到它。在我的情况下,班级名称是.file_upload.

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

于 2013-08-14T10:49:26.680 回答