【发布时间】:2013-11-13 12:23:12
【问题描述】:
我有以下 webview 客户端,当我们查看 URL 中不包含单词 google 的页面时,它将用户代理设置为桌面浏览器。 (也可以做其他事情,但一切正常)。
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (!url.contains("google")) {
String newUA= "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/20100101 Firefox/4.0";
webView.getSettings().setUserAgentString(newUA);
view.loadUrl(url);
}else {
webView.getSettings().setUserAgentString(null);
view.loadUrl(url);
}
return true;
}
public void onPageStarted(WebView view, String url, Bitmap favicon)
{
super.onPageStarted(view, url, favicon);
progressBar.setVisibility(View.VISIBLE);
}
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
super.onPageFinished(view, url);
String page = webView.getUrl();
if (!(page.contains("google"))){
grabit.setVisibility(View.VISIBLE);
}else{
grabit.setVisibility(View.GONE);
}
webView.loadUrl("javascript: function loadScript(scriptURL) { var scriptElem = document.createElement('SCRIPT'); scriptElem.setAttribute('language', 'JavaScript'); scriptElem.setAttribute('src', scriptURL); document.body.appendChild(scriptElem);} loadScript('"+CFG.Bookmarklet+"');");
progressBar.setVisibility(View.INVISIBLE);
if (webView.canGoBack()){
left.setImageResource(R.drawable.ic_arrowleft);
}else{
left.setImageResource(R.drawable.ic_arrowleft_gray);
}
if (webView.canGoForward()){
right.setImageResource(R.drawable.ic_arrowright);
}else{
right.setImageResource(R.drawable.ic_arrowright_gray);
}
}
});
这个问题是,虽然在某些网站上它可以完美运行,但在其他网站上却无法正常工作,而在某些网站上,它似乎只是更改了视口。 举几个例子:
> Argos - shows mobile
> Tesco - shows mobile but view port has changed
> Amazon - works
> John Lewis - shows mobile but view port has changes
> Play.com - works
那么我有什么遗漏吗?它无法在其上运行的网站的另一种方式是检查浏览器以决定显示什么?
Chrome 中的“显示桌面版本”似乎适用于这些网站。所以可能 chrome 还做了其他事情?
谢谢
【问题讨论】:
-
请用您的网页浏览打开myhttp.info并检查是否有可疑之处
-
一切看起来都应该如此,即用户代理是我设置它的方式等。
-
一些网站会检查查看网站的设备的屏幕尺寸,并据此决定显示移动网站或桌面网站,而不是仅仅依赖用户代理字符串。
-
@A.C.R.Development 你觉得有办法伪造正常的桌面屏幕尺寸吗?
-
@ZacPowell 我认为没有办法。