2015-04-03 101 views
5

爲什麼有些頁面不能加載到我的WebView中(但在Chrome中似乎工作正常)?例如:在Chrome應用程序中加載URL但不加載WebView

我已經把我的WebView啓用JS。這裏是我的WebView的init代碼:

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); 

回答

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上的行爲。

然後我決定將用戶代理字符串模仿爲桌面瀏覽器。我從http://www.useragentstring.com/pages/Chrome/中挑選了一個UA字符串,並在loadUrl方法之前將它設置爲這樣,並且聲音!

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,但你可以強制使用正確的用戶代理字符串來加載網站的桌面版本。

+0

不幸的是,我不能將用戶代理設置爲桌面瀏覽器,因爲我想加載移動頁面。至於第一個鏈接,我現在意識到我已經在嘗試URL之前設置了一個登錄cookie。WebView在訪問URL源處的實際內容時只會加載問題,而您沒有看到該內容,因爲您尚未登錄。讓我看看是否可以找到更好的示例。 – 2015-04-06 16:17:22

+0

在這種情況下,您可以更改導致問題的網頁內容。 http://stackoverflow.com/a/8274881/3399234該答案顯示瞭如何去做,但肯定這不是一個合理和有效的解決方案。 – Ugur 2015-04-06 20:02:52

+0

你可以嘗試使用這個網址http://onlinelibrary.wiley.com/doi/10.1002/iid3.28/epdf – 2015-04-08 17:57:09

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); 

希望它可以幫助你。

+0

這是行不通的。 – 2015-04-08 17:57:18

+0

在我的情況下就像一個魅力。 。 。 – 2017-01-03 11:26:56

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,如果你已經知道將加載裏面的URL。

相關問題