URL加载Chrome应用程序,但不加载WebView

Wis*_*erd 5 android android-webview

为什么有些页面没有加载到我的WebView中(但似乎在Chrome中工作正常)?例如:

我已经设置了我的WebView以启用JS.这是我的WebView初始化代码:

    webView = (WebView) findViewById(R.id.webview);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.getSettings().setDisplayZoomControls(false);
    webView.getSettings().setDomStorageEnabled(true);
    webView.setWebViewClient(new WebViewClient());

    webView.setWebChromeClient(new WebChromeClient() {
        public void onProgressChanged(WebView view, int progress) {

            progressBar.setProgress(progress);

            if (progress == 100) {
                progressBar.setVisibility(View.GONE);
            }
            else {
                progressBar.setVisibility(View.VISIBLE);
            }
        }
    });

    webView.loadUrl(url);
Run Code Online (Sandbox Code Playgroud)

Ugu*_*gur 2

我的项目中有一个非常相似的 webview 代码,我只是替换了您提供的网址。

\n\n
    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n    super.onCreate(savedInstanceState);\n    setContentView(R.layout.activity_user_agreement);\n    WebView webView = (WebView) findViewById(R.id.userAgreementView);\n    final ProgressWheel progressWheel = (ProgressWheel) findViewById(R.id.progress_bar);\n    webView.getSettings().setJavaScriptEnabled(true);\n    webView.getSettings().setBuiltInZoomControls(true);\n    webView.getSettings().setDisplayZoomControls(false);\n    webView.getSettings().setDomStorageEnabled(true);\n    //webView.getSettings().setUserAgentString("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36");\n    Log.v("UA", webView.getSettings().getUserAgentString());\n    String url = getIntent().getStringExtra("data"); //Urls provided by other activity\n    if (url != null && !url.equals("")) {\n        webView.setWebChromeClient(new WebChromeClient() {\n            public void onProgressChanged(WebView view, int progress) {\n\n                 //progress wheel fills here etc.\n                 // ...\n                 // ...  \n                }\n            }\n        });\n    webView.loadUrl(url);\n\n    }\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

http://onlinelibrary.wiley.com/doi/10.1002/art.39115/pdf 这个加载就像网络视图中的魅力一样,没有任何故障,也没有错误的行为。

\n\n

然后我尝试了这个http://www.ajpmonline.org/article/S0749-3797(14)00628-X/fulltext,当webview完成加载时,一个新的本机Chrome活动立即启动并加载页面的移动版本一项单独的活动。

\n\n

我使用桌面 Chrome 检查了网站的行为,当我使用 Android 用户代理字符串发出 http 请求时,结果会执行以下操作。

\n\n
    \n
  1. 返回 302 状态代码并重定向到http://www.ajpmonline.org/action/mobileChoice?originalRequestUri=%2Farticle%2FS0749-3797%2814%2900628-X%2Ffulltext&userInterface=mobile
  2. \n
  3. 设置名为 MobileUI 的 cookie 并重定向到带有 302 状态代码的原始页面。
  4. \n
  5. 根据 MobileUI cookie 加载页面的移动版本。此时网站可能会运行 JavaScript 代码来弹出一个新窗口,这解释了我的 Galaxy S4 mini 上的行为。
  6. \n
\n\n

然后我决定将用户代理字符串模仿为桌面浏览器。我从http://www.useragentstring.com/pages/Chrome/中选择了一个 UA 字符串,并在 loadUrl 方法之前将其设置为这样,瞧\xc3\xa0!

\n\n
    webView.getSettings().setUserAgentString("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36");\n    Log.v("UA", webView.getSettings().getUserAgentString());\n
Run Code Online (Sandbox Code Playgroud)\n\n

这可能是一种边缘情况,根据您正在加载的 URL,行为可能会发生变化,但您可以使用正确的用户代理字符串强制加载网站的桌面版本。

\n