我想写java应用程序使用jcef3和模拟作为移动浏览器。
我确实是这么想的:
@Override
public boolean onBeforeResourceLoad(CefBrowser cefBrowser, CefRequest cefRequest) {
Map<String, String> headerMap = new HashMap<String, String>();
Map<String, String> newHeaderMap = new HashMap<String, String>();
cefRequest.getHeaderMap(headerMap);
for (Map.Entry<String, String> entry : headerMap.entrySet())
{
if (entry.getKey().equals("User-Agent")) {
newHeaderMap.put(entry.getKey(), "Mozilla/5.0 (Linux; Android 4.3; GT-I9300 Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.114 Mobile Safari/537.36");
} else {
newHeaderMap.put(entry.getKey(), entry.getValue());
}
}
cefRequest.setHeaderMap(newHeaderMap);
return false;
}问题是我想浏览的那个页面,就像移动设备检测到的那样,这是一些奇怪的操作系统:),我不知道为什么。如果我下载一些插件表单chrome,比如用户代理切换器,并使用相同的UA,那么一切都是正常的,所以我确信页面使用了用户代理验证。
有什么想法吗?
发布于 2014-12-15 15:54:42
好吧,我解决了这个问题。
通常有两种方法来检测浏览器。第一个是请求头。我的示例代码展示了如何做到这一点。第二个是javascript navigator属性。这就是问题所在。请求使用正确的userAgent发送,但javascript navigator.userAgent显示错误的用户代理版本,该版本与请求标头中发送的版本不同。为了正确地做到这一点,你应该覆盖javascript navigator.userAgent变量。在CEF3中,注入一些覆盖它的javascript代码是没有问题的。
https://stackoverflow.com/questions/26697344
复制相似问题