AJAX请求Cordova / PhoneGap 2.1.0 Android应用程序中的自签名HTTPS资源

我正在尝试实现Chris发现
here提供的解决方法,允许PhoneGap / Cordova构建的Android应用程序向具有自签名SSL证书的服务器发出AJAX HTTPS请求.我正在使用PhoneGap / Cordova 2.1.0,而Chris正在使用1.7.0.我可以毫无问题地创建MyWebViewClient类.但是,当我添加这行代码时……

this.setWebViewClient(this.appView, new MyWebViewClient(this));

…到M​​ainActivity类’重写的init()方法,我收到此错误:

The method setWebViewClient(CordovaWebView, MyWebViewClient) is undefined for the type MainActivity

这是MyWebViewClient.java的代码:

package [packagename];

import android.net.http.SslError;
import android.webkit.SslErrorHandler;
import android.webkit.WebView;
import org.apache.cordova.CordovaWebViewClient;
import org.apache.cordova.DroidGap;

public class MyWebViewClient extends CordovaWebViewClient {

    public class MyWebViewClient(DroidGap ctx) {
        super(ctx);
    }

    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        handler.proceed();
    }
}

这是我的MainActivity.java代码:

package [packagename];

import android.os.Bundle;
import org.apache.cordova.*;

public class MainActivity extends DroidGap {

    @Override
    public void init() {
        super.init();
        this.setWebViewClient(this.appView, new MyWebViewClient(this)); // Error occurs here
    }

    @Override
    public void onCreate(bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setBooleanProperty("keeprunning", false);
        super.loadUrl("file:///android_asset/www/index.html");
    }
}

我没有足够的声誉,否则我会对Chris的回答发表评论.此外,我不是在寻找一个jQuery解决方案(我已经知道我可以进行$.ajax()调用来避免这个问题,但我试图将jQuery从我的应用程序中删除).

有任何想法吗?非常感谢您的帮助!

编辑:请在回复之前查看我的评论.

最佳答案 这可以在以后的Cordova版本中修复如下(我正在使用2.2).如上所述,它在onPageStarted()失败 – 这是因为它期望一个appView,它是null,因此你得到一个NullPointerException.设置appView似乎解决了它,例如

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

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

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

}

请注意,还需要super.init()

点赞