【问题标题】:Android Phonegap - TIMEOUT ERROR when trying to set a WebViewClientAndroid Phonegap - 尝试设置 WebViewClient 时出现超时错误
【发布时间】:2012-07-03 19:27:32
【问题描述】:

我正在使用 Android 和 Phonegap,目前我在做一件简单的事情时遇到了麻烦。我需要为 PhoneGap webView 设置一个 webViewClient,以便捕获完成的页面的 URL 并使用它。

这是代码:

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

}

}

【问题讨论】:

    标签: android cordova


    【解决方案1】:

    我想我已经在最新的 Cordova 版本上发现了这一点(我使用的是 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()也是需要的

    【讨论】:

      【解决方案2】:

      为了完成您想做的事情,我将扩展 CordovaWebViewClient 类并覆盖您想要的方法,但不要忘记调用超级方法,否则 PhoneGap 将无法在没有 CordovaWebViewClient 的情况下工作,因为它是一个重要的类。

      【讨论】:

      • 感谢您的回答西蒙,我做到了,但它不起作用,我用实现您所说的代码更新了第一篇文章,是您所说的吗?
      • 它终于可以调用“super.onPageFinished(view, url);”在 onPageFinished 方法中...谢谢!
      • 哦,我刚发现它只适用于1.8.1版本,在1.9.0它不起作用:调用super.onPageStarted(...)时会抛出错误
      • 能否请您提供建议或指向如何覆盖 CordovaWebViewClient 的链接?我收到诸如“Webview 无法解析为类型”之类的错误
      【解决方案3】:

      你忘了叫 super ;)

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

      【讨论】:

        猜你喜欢
        • 2012-02-29
        • 2013-08-09
        • 1970-01-01
        • 2011-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-04
        • 1970-01-01
        相关资源
        最近更新 更多