2012-07-03 59 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); 
     } 
    }); 
相关问题