我想根据用户代理为我的Vaadin应用程序设置不同的主题.特别是我想至少区分移动设备(iPhone,Android,...)和桌面网络浏览器.
Vaadin的API揭示了两个有趣的类:
BrowserInfo似乎完全按照我的需要完成工作,但是通过其get方法实现了失败:
SEVERE: javax.servlet.ServletException: ...
Caused by: java.lang.UnsatisfiedLinkError: com.vaadin.terminal.gwt.client.BrowserInfo.getBrowserString()Ljava/lang/String;
Run Code Online (Sandbox Code Playgroud)
无法找到WebBrowser从我的应用程序中访问的方法.
BrowserInfo失败?我想显示一个弹出窗口,告诉用户他们的浏览器是否已过时.如何在javascript中找出他们使用的浏览器?
我目前正在研究浏览器功能,并试图测试.NET 4.0附带的浏览器定义文件.为此,我使用Firefox的附加组件来更改用户代理,我有一个简单的页面报告以下内容:
Request.UserAgent
Request.Browser.Id
Request.Browser.Browser
Request.Browser.MajorVersion
Request.Browser.MinorVersion
Request.Browser.Platform
Request.Browser.IsMobileDevice
Request.Browser.MobileDeviceManufacturer
Request.Browser.MobileDeviceModel
Run Code Online (Sandbox Code Playgroud)
通常,这会根据默认浏览器定义文件中的注释中提供的示例提供正确的信息.但是,我不时会看到奇怪的结果,我无法解释.
以iphone.browser定义文件中的示例iPhone用户代理为例,如下所示:
Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3
Run Code Online (Sandbox Code Playgroud)
这应该将浏览器作为Safari返回.这取决于将Safari作为父级的IPhone网关,它与术语相匹配Safari.
稍微更改用户代理以便在iPhone上模拟邮件客户端的用户代理意味着删除用户代理的末尾部分,如下所示:
Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko)
Run Code Online (Sandbox Code Playgroud)
现在应该将Mozilla作为浏览器返回,因为它无法匹配该术语Safari.但是,在第一次报告错误信息后立即对此进行分析,仍然表明浏览器是Safari.
添加自定义.browser文件与App_Browsers文件夹,然后修改它似乎迫使它暂时正确,几乎像定义或规则被缓存,并没有完全运行每个请求.
这也是另一种方式,如果你从第二个示例用户代理开始,那么在分析第一个用户代理时,它将报告为Mozilla而不是Safari.
任何人都可以解释这种行为或解决方法吗?它是否尝试进行某种(不那么)聪明的缓存,它根据类似的用户代理进行假设?
谢谢.
我知道用户代理嗅探不是一种万无一失的方法,因为过多的设备日常发布,但我需要一种方法来获取用户正在访问的精确手机型号我的网站,以指导他/她到相应的帮助区域/文档.
诸如http://detectmobilebrowsers.com/之类的工具允许您检测移动设备,浏览器,操作系统等,但是有什么东西可以拿起您正在使用的特定手机型号(使用Javascript)吗?比如iPhone 4s
谢谢你的任何想法.
我知道我可以使用媒体查询激活一些样式,如下所示:
/* Magic for mobile devices */
@media (max-width: 33em )
{
}
Run Code Online (Sandbox Code Playgroud)
但是我不太喜欢这种方法,因为它仅检查屏幕宽度。我找到了java script用于检测移动浏览器的代码,现在我需要进行相同的检查CSS
if (/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)) {
// some code..
}
Run Code Online (Sandbox Code Playgroud)
有CSS相当于这个js的吗?
我想检测进入我网站的用户的原始网址(例如稍后执行某些操作)。这可以使用角度来实现吗?
我正在尝试为Asp.Net中的Edge编写一个浏览器定义文件,以避免将其标识为"Chrome 46".
我在Edge.browser文件App_Browsers夹中创建了以下文件:
<browsers>
<!--Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586-->
<browser id="Edge" parentID="Chrome">
<identification>
<userAgent match="Edge" />
</identification>
<capture>
<userAgent match="Edge/(?'version'(?'major'\d+)(\.(?'minor'\d+)?))" />
</capture>
<capabilities>
<capability name="browser" value="Edge" />
<capability name="version" value="${version}" />
<capability name="majorVersion" value="${major}" />
<capability name="minorVersion" value="${minor}" />
</capabilities>
</browser>
</browsers>
Run Code Online (Sandbox Code Playgroud)
这很好地匹配Edge,但是如果使用Chrome向网站发出另一个请求,浏览器也会匹配为Edge:S
我究竟做错了什么?
我在 Google 应用程序中遇到 FB 登录流程问题。目前,对于某些移动浏览器,我遵循重定向身份验证流程。
像这样:var w = window.open("https://m.facebook.com/dialog/oauth?....", "_blank", ...)。
但w变量undefined在 iOS 的Google 应用程序中
,所以我只想对这种情况使用另一种策略。您能帮我了解如何检测此浏览器吗?(使用userAgent或其他东西)
或者也许有人可以帮助制定针对这种情况的最佳 Facebook 身份验证策略
我为我的网站编写了一个 chrome 扩展,但发现扩展在 chrome 的移动浏览器上不起作用。现在,该网站会检查用户是否安装了扩展程序。如果用户不这样做,网站会要求用户通过内联安装来安装扩展。
问题是,如果用户在移动设备上运行 chrome,我不想提示用户安装扩展程序,因为它不起作用。我想检查浏览器运行扩展的能力,而不是移动设备的用户代理嗅探。Modernizr 似乎没有对此进行检查。有任何想法吗?
我们有一个用于测试我们的 web 应用程序的浏览器列表。如果他的浏览器不受支持或测试与我们的应用程序兼容,我有一个任务通知用户。
我们browserslist在项目中有一个配置,我正在寻找一种方法来根据列表测试当前浏览器。我试过browserlist-useragent,但我们不能用的WebPack编译它,由于它使用的事实net,fs,tls我们不希望在我们的包,包括和其他本地节点模块。
有没有更好的方法可以避免在许多不同的地方复制受支持的浏览器列表,而只使用已经存在的浏览器列表配置来检测用户是否使用受支持的浏览器?