问题标签 [browser-feature-detection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1915 浏览

javascript - 如何以编程方式检测浏览器如何处理 window.close()?

不同的 Web 浏览器处理 window.close() 函数的方式不同。IE 提示用户进行确认,而 Firefox 和 Safari 只是无法兑现,除非窗口最初是用 Javascript 打开的,并在控制台中显示一条消息。

我支持在我们组织内部使用的第三方 Web 应用程序在类似向导的一系列页面的末尾显示一个“关闭”按钮。这适用于 IE,这是我们大多数用户使用的。但是,这显然在 FF 中失败了。我宁愿保留按钮并使用 Javascript 通过不在任何不会执行 window.close() 的浏览器中显示该按钮来优雅地降级 UI。

根据经验,我会尝试检查浏览器功能,而不是尽可能依赖基于浏览器检测的硬编码策略。有没有办法以编程方式检查对 window.close() 的支持,以便我可以确定是否应该首先显示按钮?

0 投票
3 回答
3173 浏览

javascript - HTML5 占位符功能检测问题

我需要测试占位符支持。以下适用于所有现代浏览器以及 IE7、IE8、IE9:

它有效,但 JSLint 抱怨使用in

出乎意料的“进来”。与 undefined 进行比较,或者改用 hasOwnProperty 方法。

好的,所以我将它重构为:

现在它通过了 JSLint,没有任何错误或警告,但它在 IE7 和 IE8 中用这个旧栗子中断:

对象不支持属性或方法“hasOwnProperty”

知道如何让 JSLint 以及 IE7 和 IE8 开心吗?

0 投票
3 回答
25191 浏览

html - 如何检测 HTML5 音频 MP3 支持?

如果 HTML5 音频播放可用,我知道如何检查 Javascript。但是我如何专门检查是否可以播放 MP3 音频,因为 IE9 和 Chrome 支持它,而 Firefox 和 Opera 不支持。

0 投票
3 回答
4874 浏览

javascript - 如何检测浏览器是否支持 MJPEG?

现代浏览器除了 IE 句柄MJPEG( Motion JPEG )。是一个示例小提琴。

我可以检测到对 的支持MJPEG吗?我徒劳地浏览了Modernizr 。

0 投票
4 回答
8123 浏览

javascript - 如何检测浏览器是否支持指定的css伪类?

通过 JavaScript 在浏览器中检测对任何 css 伪类的支持的概念是什么?确切地说,我想检查用户的浏览器是否支持:checked伪类,因为我已经制作了一些带有复选框的 CSS 弹出窗口,并且需要为旧浏览器做回退。

回答:我发现已经在 Modernizr "Additional Tests"中实现了测试 css 选择器的方法

0 投票
1 回答
261 浏览

javascript - javascript检测选项标签文本缩进功能或检测浏览器类型作为后备

我有一个选择下拉菜单,它应该代表网站中页面的层次结构。

该结构是在后端进行的,并使用 css 进行样式设置。

这使得更深层次的选项根据每个页面在站点层次结构中的深度显示为缩进。但是,这种样式仅适用于 FireFox,不适用于 Chrome。我知道控件的样式在浏览器和操作系统之间很大程度上是不平衡的,所以我不会去那里。相反,我想在每个选项的文本之前添加“-”字符,以使层次结构可见。我只需要为 Chrome 执行此操作,因为我在这个项目中根本不支持 IE。

对象文本的操作将在 javascript 中完成。

我的问题是这样的:

知道不推荐浏览器检测,而是优先使用特征检测,我该如何针对这种浏览器行为执行特征检测?如果这不可能,是否有一个快速测试可以让我知道我是在 Chrome/webkit 还是 Firefox/Gecko 中?

0 投票
1 回答
2702 浏览

flash - 测试设备是否启用了 Flash,Modernizr 风格

有没有办法测试设备是否支持 Flash,类似于http://www.modernizr.com可以特征检测浏览器并向正文添加类的方式?

0 投票
20 回答
476128 浏览

javascript - 检测设备是否为 iOS

我想知道是否可以检测浏览器是否在 iOS 上运行,类似于如何使用 Modernizr 进行功能检测(尽管这显然是设备检测而不是功能检测)。

通常我更喜欢功能检测,但我需要确定设备是否是 iOS,因为他们根据这个问题处理视频的方式YouTube API not working with iPad / iPhone / non-Flash device

0 投票
1 回答
252 浏览

jquery - 如何制作一个由其他人编写的 jquery 插件,在它可以实际工作的所有浏览器中工作?

如何使用功能检测来制作由其他人编写的插件,以在所有可以实际工作/受支持的浏览器上工作。plugin的文档说它在 IE 8 中受支持,但实际上并不起作用。我知道这是因为浏览器检测不可靠,但我能做些什么才能让它在所有可以实际工作的浏览器中工作?

细节

举一个特定的例子,我使用 jQuery 选择的插件版本 0.9.7,正如文档所说 -

支持所有现代浏览器(Firefox、Chrome、Safari 和 IE9)。还启用了对 IE8 的旧版支持。

但是,我发现它不适用于许多 IE 8,但适用于 IE tester IE 8。然后在插件代码中,我发现了这个浏览器检测逻辑,它只是从插件逻辑中逃脱了 -

我发现它$.browser.version在我的 IE 8 上返回 7.0,这就是它不起作用的原因。好吧,没什么好惊讶的,我知道。我尝试删除$.browser.version === "7.0"条件,只是为了检查它是否真的在我的 IE 8 上有效并且有效。但是,我无法删除该条件,因为插件的作者已经这样做了,他一定知道得更好。

现在,我的问题是如何使用功能检测使其在所有可以实际工作的浏览器上工作。我想合乎逻辑的步骤是找出该插件使用了哪些所有浏览器功能。那我怎么发现呢?请原谅我对此的有限知识。我只是有特征检测的理论知识,它比浏览器检测更好等,但从未实际使用过任何进行特征检测的代码。我在大约 1-2 年前了解到这一点。

而这一次,当我搜索时,我开始了解Modernizer。这会有帮助吗?我不确定,因为它说它用于构建下一代 HTML5 和 CSS3 驱动的网站,而我们还没有大量使用 HTML5、CSS3。或者,一旦我知道插件需要哪些所有功能,jQuery.support对我来说就足够了。

一些进一步的推理

我发现这个问题Browser detection via object/feature detection作者询问是否可以使用特征检测来确定浏览器实际上是什么。一条评论说 - “功能检测的重点是让您可以了解浏览器是否确实具有您需要的功能。当您正确执行此操作时,您实际上并不关心它是什么浏览器,您只关心它是否具有完成工作所需的功能。” 我理解并同意这一点,但是说这些浏览器支持给定插件有什么意义。为什么插件作者不列出所有需要的功能,从而方便人们使用?但是,在我看来,列出支持的浏览器背后的要点只是通过假设理想的浏览器来给出兼容性的想法。

例如,两个理想的 IE 6 浏览器会有相同的选择下拉 z-index 问题,会干扰弹出 div。假设一个插件有这个问题,然后说这个插件与 IE 6 不兼容意味着一个理想的 IE 6 浏览器,而不是另一个 IE 8 浏览器,它的用户代理经过调整并返回 IE 6 作为浏览器版本。

在那种情况下(列出支持的浏览器背后的要点只是通过假设理想的浏览器来了解兼容性),使用特征检测识别浏览器是否有意义?如果,那么为什么没有很多示例片段可用?

很多问题.. :) 我想,今天我问了这一切......

0 投票
1 回答
1308 浏览

jquery - 在 IE8 中模拟 css3 样式

我有一个使用各种 CSS3 样式的网站,这些样式仅在 Firefox 10 中真正经过测试。我需要一些方法来模拟在 IE8 中查看时本机不支持的各种 CSS 样式:

  • 盒子阴影
  • 文字阴影
  • 背景渐变
  • 圆角
  • 不透明度

我试过使用css3pie,但是当我包含 .htc 文件时,它产生了一些令人不快的副作用。我知道有 jQuery 插件可以为 IE8 中的元素添加框阴影和圆角,所以我正在考虑在条件代码块中使用这些,例如

我意识到这有点脆弱,因为我使用的是浏览器检测而不是特征检测,但是我找不到一种方法来检测像使用jQuery.support圆角的能力这样的特征。

其次,我只知道可以模拟一些 CSS3 属性(框阴影和圆角)的 jQuery 插件,还有其他用于背景渐变、不透明度和文本阴影的插件吗?

最后,如果有完全不同的方式来实现我的目标,那么请随时提出替代方案。