2012-07-03 82 views
6

我正在使用Android和Phonegap,此刻我遇到了一件簡單的事情。我需要將一個webViewClient設置爲PhoneGap webView,以便捕獲完成的頁面的URL並使用它。Android Phonegap - 嘗試設置WebViewClient時發生TIMEOUT錯誤

這是代碼:

public class PhoneGapTest extends DroidGap { 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     super.setBooleanProperty("loadInWebView", true); 
     super.clearCache(); 
     super.keepRunning = false; 
     super.loadUrl("file:///android_asset/www/index.html"); 

     super.appView.setWebViewClient(new WebViewClient(){ 

      @Override 
      public void onPageStarted(WebView view, String url, Bitmap bitmap) { 

      Log.i("TEST", "onPageStarted: " + url); 

      } 

      @Override 
      public void onPageFinished(WebView view, String url) { 

      Log.i("TEST", "onPageFinished: " + url); 

      } 

     }); 

    } 

代碼不似乎工作,頁面不載入,我得到一個超時錯誤,但如果我刪除「setWebViewClient」的部分頁面加載完美。

我看到有一個類CordovaWebViewClient,我必須使用它而不是WebViewClient嗎?我在網絡上發現了這種方式:

 this.appView.setWebViewClient(new CordovaWebViewClient(this){ 

      @Override 
      public boolean shouldOverrideUrlLoading(final WebView view, String url) { 
      Log.i("BugTest", "shouldOverrideUrlLoading: " + url); 
      return true; 
      } 

      @Override 
      public void onPageStarted(WebView view, String url, Bitmap bitmap) { 

      Log.i("TEST", "onPageStarted: " + url); 

      } 

      @Override 
      public void onPageFinished(WebView view, String url) { 

      Log.i("TEST", "onPageFinished: " + url); 

      } 

      @Override 
      public void doUpdateVisitedHistory(WebView view, String url, boolean isReload){   
      } 

     }); 

但是,該代碼也不工作,我仍然有一個超時錯誤。 我也看到,已經有一個webVieClient成員,但我不,如果我必須使用它和如何。

我與PhoneGap的版本1.9.0工作

感謝您閱讀


答西蒙:

它的工作就這樣,謝謝!

public class MainActivity extends DroidGap { 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    super.init(); 
    super.appView.clearCache(true); 
    super.appView.clearHistory(); 
    this.appView.setWebViewClient(new CustomCordovaWebViewClient(this)); 
    super.loadUrl("file:///android_asset/www/index.html"); 
} 

public class CustomCordovaWebViewClient extends CordovaWebViewClient { 

public CustomCordovaWebViewClient(DroidGap ctx) { 
    super(ctx); 
} 

@Override 
public void onPageStarted(WebView view, String url, Bitmap bitmap) { 
    super.onPageStarted(view, url, bitmap); 
    Log.i("TEST", "onPageStarted: " + url); 
} 

@Override 
public void onPageFinished(WebView view, String url) { 
    super.onPageFinished(view, url); 
    Log.i("TEST", "onPageFinished: " + url); 
} 

@Override 
public void doUpdateVisitedHistory(WebView view, String url, boolean isReload){ 
    super.doUpdateVisitedHistory(view, url, isReload); 
} 

@Override 
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
    super.onReceivedError(view, errorCode, description, failingUrl); 
} 

} 

} 

回答

5

來完成你想做的事我會延長CordovaWebViewClient類並覆蓋你想要的方法是什麼,但不要忘記調用父類的方法,或因爲它是一個重要的PhoneGap不會沒有CordovaWebViewClient工作類。

+0

謝謝您的回答西蒙,我這樣做,但它不起作用,我用代碼實現了你所說的更新了第一篇文章,那是你說的嗎? – Spike777

+0

它最終調用了「super.onPageFinished(view,url);」在onPageFinished方法...謝謝! – Spike777

+0

哦,我只是覺得它只適用於版本1.8.1,在1.9.0它不起作用:它調用super.onPageStarted時發生錯誤(...) – Spike777

7

我想我已經想通了最新的科爾多瓦版本(我使用2.2)。它在onPageStarted()失敗,因爲它期待一個appView,它是空的。設置APPVIEW似乎解決它如

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    super.init(); 

    CordovaWebViewClient webViewClient = new CustomAcceptingWebViewClient(this); 
    webViewClient.setWebView(this.appView); 
    this.appView.setWebViewClient(webViewClient); 

    super.loadUrl("file:///android_asset/www/index.html"); 

} 

注意,super.init()還需要

+0

謝謝。這在Cordova 2.8.1中也很有魅力。 – shamittomar

0

你忘了打電話給超)

// Assign webclient. 
    this.appView.setWebViewClient(new CordovaWebViewClient(me, this.appView) { 
     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      super.onPageStarted(view, url, favicon); 
     } 

     @Override 
     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
      super.onReceivedError(view, errorCode, description, failingUrl); 
     } 
    }); 
相關問題