【问题标题】:Force webview to display desktop sites强制 webview 显示桌面站点
【发布时间】: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 我认为没有办法。

标签: android webview


【解决方案1】:

您可以使用this WebView subclass 中的setDesktopMode(true) 或详细了解implemented

这样,您不必设置固定的用户代理字符串。此外,仅设置用户代理字符串通常是不够的。当然,这取决于网站,因为每个网站都使用自己的方式来确定客户端是使用移动设备还是桌面设备。

【讨论】:

  • 你提到的库通过重置 usedagent 使用相同的行为有什么区别??
  • @SimonKarmy 不,正如您所看到的,这还不是全部。首先,它不会将用户代理字符串设置为固定和预定义的字符串,这会扭曲许多设备的实际值。其次,它还可以调整视口和缩放设置。第三,它提供了一种恢复设置的方法。
【解决方案2】:

你可以试试这个

webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setUserAgentString("Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/20100101 Firefox/4.0");

【讨论】:

  • 太棒了 :) 谢谢!
  • @simon 嗨,我在第一次加载桌面网站时尝试了同样的方法,但第二次将 webview 重定向到其他网站(移动网站)
【解决方案3】:

唯一对我有用的解决方案(javascript 将执行多次,但这是目前唯一可行的解​​决方案)

@Override
public void onLoadResource(WebView view, String url) {
       super.onLoadResource(view, url);
       view.evaluateJavascript("document.querySelector('meta[name=\"viewport\"]').setAttribute('content', 'width=1024px, initial-scale=' + (document.documentElement.clientWidth / 1024));", null);
}

你也可以设置桌面UA字符串

webView.getSettings().setUserAgentString("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    相关资源
    最近更新 更多