6

私は Android と Phonegap を使用していますが、現在、簡単な問題が 1 つあります。完成したページの URL をキャプチャして操作するには、webViewClient を PhoneGap webView にセットアップする必要があります。

これはコードです:

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

        });

しかし、そのコードも機能していません。まだ TIMEOUT ERROR が発生しています。また、既に 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);
 }

}

}
4

3 に答える 3

7

最新の Cordova バージョン (私は 2.2 を使用しています) でこれを理解したと思います。onPageStarted()nullである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()も必要であることに注意してください

于 2012-11-30T00:46:29.317 に答える
5

あなたがやりたいことを達成するには、CordovaWebViewClient クラスを拡張し、必要なメソッドをオーバーライドしますが、スーパー メソッドを呼び出すことを忘れないでください。重要なクラスであるため、CordovaWebViewClient がないと PhoneGap は機能しません。

于 2012-07-04T01:56:17.930 に答える
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);
        }
    });
于 2015-03-14T16:14:48.863 に答える