将 WebView 设置为查看桌面站点而不是移动站点

Posted

技术标签:

【中文标题】将 WebView 设置为查看桌面站点而不是移动站点【英文标题】:Setting WebView to view Desktop Site and Not Mobile Site 【发布时间】:2013-01-19 05:29:21 【问题描述】:

我对 Stack Overflow 和 Google 进行了大量研究,但我发现没有任何东西真正适合我。我希望该站点查看桌面站点而不是移动站点。我该怎么做呢?我希望它直接转到桌面网站。

WebView myWebView = (WebView) findViewById(R.id.webview); 
    myWebView.loadUrl("http://www.apotter96.webs.com/");

【问题讨论】:

不要认为它真的有可能,因为当他们的网站注意到您是移动设备时,它会做什么,而不是您控制。也许如果你知道他们是如何识别和保存它的,你可以用一些 javascript 或其他东西来操作它 我应该如何使用 javascript 来做到这一点? 听起来您正在寻找某种方法来更改用户的代理字符串?你有没有四处搜索过,我google的时候似乎有很多资源。 您可以使用来自this library 的setDesktopMode(true) 或阅读implemented 的内容。 设置 myWebView.setInitialScale(100);为我工作,但在 myWebView.loadUrl() 添加 webView.setWebViewClient(new WebViewClient()); 【参考方案1】:

您需要更改用户代理:http://developer.android.com/reference/android/webkit/WebSettings.html#setUserAgentString(java.lang.String)

这是一个例子:Loading html data in WebView

【讨论】:

【参考方案2】:

更改webview的用户代理

 String newUA="Foo/"; // Change this to desired UA

喜欢

 String newUA= "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/20100101 Firefox/4.0";
 mWebView.getSettings().setUserAgentString(newUA);

【讨论】:

如何启用 Flash Player? 试试这个***.com/questions/6596243/… 这工作正常,但由于使用此设置,我得到了副作用。 webview 不会在活动的 onDestroy() 中销毁。我正在使用 mWebView.destroy();在活动的 onDestroy 函数中 @BhanuSharma 我已经发布了我的答案,可以检查并告诉我 观察用户代理字符串,现在稍作修改,还包括 chrome 版本。这可能会影响最终结果......看看开发人员的官方:developer.android.com/guide/webapps/migrating#UserAgent【参考方案3】:

您可以使用 WebView 将视图显示为适合移动显示的桌面站点。

        webView = (WebView)findViewById(R.id.webView1);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setLoadWithOverviewMode(true);
        webView.getSettings().setUseWideViewPort(true);

        webView.getSettings().setSupportZoom(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setDisplayZoomControls(false);

        webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        webView.setScrollbarFadingEnabled(false);

【讨论】:

这个设置就像魅力一样。【参考方案4】:

这个方法可以帮助你在 webview 上设置 DesktopMode

public void setDesktopMode(WebView webView,boolean enabled) 
    String newUserAgent = webView.getSettings().getUserAgentString();
    if (enabled) 
        try 
            String ua = webView.getSettings().getUserAgentString();
            String androidOSString = webView.getSettings().getUserAgentString().substring(ua.indexOf("("), ua.indexOf(")") + 1);
            newUserAgent = webView.getSettings().getUserAgentString().replace(androidOSString, "(X11; Linux x86_64)");
         catch (Exception e) 
            e.printStackTrace();
        
     else 
        newUserAgent = null;
    

    webView.getSettings().setUserAgentString(newUserAgent);
    webView.getSettings().setUseWideViewPort(enabled);
    webView.getSettings().setLoadWithOverviewMode(enabled);
    webView.reload();

这样称呼

手机模式:setDesktopMode(webView, false);

桌面模式:setDesktopMode(webView, true);

【讨论】:

我正在尝试打开 web.whatsapp.com,该网站一直在加载【参考方案5】:

经过长时间的搜索,这对我有用 -

    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);

    webView.getSettings().setSupportZoom(true);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.getSettings().setDisplayZoomControls(false);

    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    webView.setScrollbarFadingEnabled(false);

【讨论】:

【参考方案6】:

对已接受答案的一点更新。这是新字符串。写这个是因为有人在 cmets 中遇到了“更新浏览器”的问题。

String newUA= "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1";
mWebView.getSettings().setUserAgentString(newUA);

【讨论】:

【参考方案7】:

如果你有更新浏览器错误,你可以试试这个来设置apple safari UA或者用Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0替换UA 这对我来说 100% 有效。

webview =(WebView)findViewById(R.id.webView);
        webview.getSettings().setMinimumFontSize(12);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.getSettings().setLoadWithOverviewMode(true);
        webview.getSettings().setUseWideViewPort(true);
        webview.getSettings().setSupportZoom(true);
        webview.getSettings().setBuiltInZoomControls(true);
        webview.getSettings().setDisplayZoomControls(false);
        webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        webview.setScrollbarFadingEnabled(false);
        String newUA= "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Safari/602.1.50";
        webview.getSettings().setUserAgentString(newUA);
        webview.loadUrl("https://solveforum.com");

【讨论】:

【参考方案8】:

试试这个

String ua = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";

【讨论】:

【参考方案9】:

某些网站不使用用户代理来确定是否必须显示页面的移动版或桌面版。 某些页面使用屏幕大小来执行此操作。

我构建了一个应用程序以在桌面模式下使用页面,但它无法正常工作。始终显示移动版本,因为页面使用屏幕大小而不是用户代理字符串。

【讨论】:

【参考方案10】:

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

        @Override
        public void onLoadResource(WebView view, String 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");

【讨论】:

这里的所有其他内容都只是关于用户代理,这对于许多网站来说是不够的。那个也适合我,谢谢分享。在出现更好的情况之前,这应该是公认的答案。 我尝试了一些方法来缩小初始比例以适应屏幕,但没有一个让我满意。看来我要把它保留为 1.0 并让用户暂时缩小。 找到它:view.evaluateJavascript("document.querySelector('meta[name=\"viewport\"]').setAttribute('content', 'width=1024px, initial-scale=' + (window.screen.width / 1024));", null) 您还需要确保启用宽视口:webView.getSettings().setUseWideViewPort(true); @Slion 拯救了我的夜晚!! :P【参考方案11】:

这对我有用

    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setLoadsImagesAutomatically(true);
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.getSettings().setBuiltInZoomControls(true);

    webView.loadUrl("https://web.whatsapp.com/");

    String userAgent = webView.getSettings().getUserAgentString();

    try 
        String androidString = webView.getSettings().getUserAgentString().
                substring(userAgent.indexOf("("),userAgent.indexOf(")")+ 1);

        userAgent = webView.getSettings().getUserAgentString().replace(androidString,"X11; Linux x86_64");

    catch (Exception e)
        e.printStackTrace();
    

    webView.getSettings().setUserAgentString(userAgent);
    webView.reload();

【讨论】:

以上是关于将 WebView 设置为查看桌面站点而不是移动站点的主要内容,如果未能解决你的问题,请参考以下文章

检查移动设备是不是正在请求桌面站点

将移动友好站点重定向到桌面客户端

将 Cordova webview 重定向到外部站点

指向外部站点的 Cordova webview 未加载图像

仅在桌面站点上执行 jQuery - 不要在移动设备上执行 jQuery [重复]

HBuilder中wap2app(将移动站点转换为移动应用)