相关疑难解决方法(0)

Javascript IE检测,为什么不使用简单的条件注释?

为了检测IE,大多数Javascript库都做了各种各样的技巧.

  • jQuery似乎在页面的DOM中添加了一个临时对象来检测某些功能,
  • YUI2对其YAHOO.env.ua = function()(文件yahoo.js)中的用户代理进行正则表达式

在阅读了这个答案之后,我想到了这是真的,为了在Javascript中简单地检测IE,我们可以简单地添加到我们的页面:

<!--[if IE]><script type="text/javascript">window['isIE'] = true;</script><![endif]-->

<script type="text/javascript" src="all-your-other-scripts-here.js"></script>
Run Code Online (Sandbox Code Playgroud)

现在,window.isIE为我们所有的Javascript代码设置变量,只需执行以下操作:

if(window.isIE)
   ...
Run Code Online (Sandbox Code Playgroud)

除了这可能导致痛苦,因为它必须在所有页面中添加之外,是否存在我可能不知道的任何问题/考虑因素?


仅供参考:我知道最好使用对象检测而不是浏览器检测,但有些情况下您仍然需要使用浏览器检测.

javascript internet-explorer browser-detection conditional-comments

47
推荐指数
5
解决办法
7万
查看次数

浏览器检测与特征检测

我将在一段时间内扮演一个魔鬼的拥护者.我一直在想为什么浏览器检测(与特征检测相反)被认为是一种不好的做法.如果我测试某个版本的某个浏览器并确认,某个功能的行为是以某种可预测的方式进行的,那么决定做特殊情况似乎没问题.原因在于它将来会万无一失,因为这部分浏览器版本不会改变.另一方面,如果我检测到DOM元素具有函数X,则不一定意味着:

  1. 此功能在所有浏览器中的工作方式相同,并且
  2. 更重要的是,即使在未来的所有浏览器中,它也会以相同的方式工作.

我只是偷看了jQuery源代码,他们通过在DOM中插入一个精心构建的HTML片段然后检查它的特定功能来进行特征检测.这是一种明智而坚实的方式,但我会说,如果我在我的小小的个人JavaScript(没有jQuery)中做了类似的事情,那将会有点太沉重.它们还具有几乎无限的QA资源的优势.另一方面,你经常看到人们做的是他们检查函数X的存在,然后基于此,他们假设函数将在具有此函数的所有浏览器中以某种方式运行.

我没有说任何意义上的功能检测不是一件好事(如果使用得当),但我想知道为什么浏览器检测通常会立即被解雇,即使它听起来合乎逻辑.我想知道这是否是另一个时髦的事情.

html javascript dom cross-browser

43
推荐指数
3
解决办法
3万
查看次数