我正在创建一个网站,在UC浏览器/迷你版中无法正确渲染。 我计划使用JavaScript覆盖样式。 提前感谢。
我正在创建一个网站,在UC浏览器/迷你版中无法正确渲染。 我计划使用JavaScript覆盖样式。 提前感谢。
使用navigator.userAgent来检测是否使用了Opera Mini或者UC Browser。
以下示例演示如何检测是否使用了UCBrowser:
if (navigator.userAgent.indexOf(' UCBrowser/') >= 0) {
// do stuff here
}
navigator.userAgent会返回一个字符串列表。像上面的例子,navigator.userAgent将返回一个包含“UCBrowser”的字符串列表,因为javascript在UC浏览器中使用。所以上面的代码片段索引这样的行并确定是否应该在userAgent输出中找到已索引的行。
我不确定这是否有效,因为我试图在Opera Mini上测试我的本地文件时遇到了麻烦,但根据我的研究,下面的代码可能有效。
if (navigator.userAgent.indexOf('Opera Mini') >= 0) {
// do stuff here
}
在JavaScript中检测UC Mini:
if (navigator.userAgent.match(/^Mozilla\/5\.0 .+ Gecko\/$/)) {
// ...
}
UC官方提供了开发者文档(1),其中记录了他们浏览器中使用的各种用户代理字符串。主要有两个模式,一个用于UC浏览器,另一个用于UC Mini。
# UC Browser
"Mozilla/5.0 (..) .. UCBrowser/10.7.9.856 U2/1.0.0 .."
# UC Mini with Speed Mode on (enabled by default)
"UCWEB/2.0 (..) .. UCBrowser/10.7.9.856 U2/1.0.0 Mobile"
需要注意的一点是,UC浏览器和UC Mini是 不同的应用程序。UC浏览器适用于iPhone/iOS和Android,并具有各种数据节省选项(包括“速度模式”选项),但与UC Mini的Speed Mode无关,也不会更改用户代理。
UC Mini仅适用于Android。在Speed Mode中,UC Mini是一个 代理浏览器,意味着它的请求通过远程服务器进行代理。此代理服务器向用户代理添加了“UCWEB”字段。类似于Opera Mini,UC Mini Speed Mode在远程服务器上呈现内容(包括JavaScript)。有趣的是,此远程Web浏览器中的DOM报告与其网络层不同的用户代理。UC Mini Speed Mode中的navigator.userAgent
始终报告以下奇怪的固定字符串,没有任何“UCWEB”、“UCBrowser”或客户端自己的用户代理的痕迹:
Mozilla/5.0 (X11; U; Linux i686; zh-CN; r:1.2.3.4) Gecko/
这个精确的字符串用于所有使用UC Mini for Android在速度模式下的客户端。请注意末尾的斜杠、“Linux”和“zh-CN”。我建议使用以下正则表达式来检测它:
/^Gecko\/$/
/^Mozilla\/5\.0 .+ Gecko\/$/
document.clientWidth
和window.outerWidth
都为0。这就是我使用的方法。 - hexalysnavigator.userAgent
是您要查找的内容,但它已被弃用。
但是理想情况下,您不希望依赖用户代理。(请参阅: https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)。如果UC浏览器/Mini中存在渲染错误,则其他浏览器中也可能存在该错误。最好找到一种修复错误的方法,而不是尝试找到并针对发生错误的每个浏览器。
navigator.userAgent
https://www.whatismybrowser.com/developers/tools/user-agent-parser/browse/browser-name/uc-browser-user-agents - mwilson