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

时间:2015-04-03 17:57:10

标签: 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);

4 个答案:

答案 0 :(得分:0)

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

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

                 //progress wheel fills here etc.
                 // ...
                 // ...  
                }
            }
        });
    webView.loadUrl(url);

    }

}

http://onlinelibrary.wiley.com/doi/10.1002/art.39115/pdf这个像webview中的魅力一样加载,没有毛刺,也没有错误的行为。

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

我使用桌面Chrome检查了网站的行为,当我使用Android用户代理字符串发出http请求时,结果表明这样做了。

  1. 返回302状态代码并重定向到http://www.ajpmonline.org/action/mobileChoice?originalRequestUri=%2Farticle%2FS0749-3797%2814%2900628-X%2Ffulltext&userInterface=mobile
  2. 设置名为MobileUI的cookie并重定向到包含302状态代码的原始页面。
  3. 根据MobileUI cookie加载页面的移动版本。那时网站可能正在运行一个javascript代码来弹出一个新窗口,这解释了我的Galaxy S4 mini上的行为。
  4. 然后我决定将用户代理字符串模仿为桌面浏览器。我从http://www.useragentstring.com/pages/Chrome/中选择了一个UA字符串,并在loadUrl方法和voilà之前将其设置为这样!

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

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

答案 1 :(得分:0)

我正在使用此代码:

    WebSettings settings = webView.getSettings();
    settings.setLoadWithOverviewMode(true);
    settings.setUseWideViewPort(true);
    settings.setJavaScriptEnabled(true);

    settings.setAppCacheEnabled(false);
    settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
    settings.setDatabaseEnabled(false);
    settings.setDomStorageEnabled(false);
    settings.setGeolocationEnabled(false);
    settings.setSaveFormData(false);

希望它可以帮到你。

答案 2 :(得分:0)

我环顾四周,首先找到这个网址:http://www.ajpmonline.org/article/S0749-3797(14)00628-X/fulltext似乎他们正在使用' jwplayer'我认为,既然WebView没有处理它,它就会推出真正的'网页浏览器。

此代码适用于上面的网址:

private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (Uri.parse(url).getHost().contains("secure.jbs") || Uri.parse(url).getHost().contains("ajpmonline"))
            return false;

        Log.d("MYWEBVIEWCLIENT", "This url couldn't not be handled by the webclient : " + Uri.parse(url).getHost());
        return true;
    }
}

我同意这不是最好的方法。我不知道您的webView的目的,如果您已经知道将加载到其中的网址,您可以实现自定义WebViewClient。

答案 3 :(得分:0)

对我来说这是一个愚蠢的事情,网络视图的高度是wrap_content 应该是match_parent