【问题标题】:AJAX Requests to Self-Signed HTTPS Resources in Cordova/PhoneGap 2.1.0 Android AppsCordova/PhoneGap 2.1.0 Android 应用程序中对自签名 HTTPS 资源的 AJAX 请求
【发布时间】:2012-10-15 21:07:45
【问题描述】:

我正在尝试实施 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));

...对 MainActivity 类的重写 init() 方法,我收到此错误:

方法 setWebViewClient(CordovaWebView, MyWebViewClient) 未为 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");
    }
}

我没有足够的声誉,否则我只会评论克里斯的回答。另外,我不是在寻找 jQuery 解决方案(我已经知道我可以调用 $.ajax() 来避免这个问题,但我试图将 jQuery 排除在我的应用程序之外)。

有什么想法吗?非常感谢您的帮助!

编辑:请在回复之前查看下面的我的 cmets。

【问题讨论】:

  • 我将有问题的代码行更改为“this.webViewClient = new MyWebViewClient(this);”我可以构建应用程序并仍然发出 AJAX HTTP 请求,但是对于使用自签名 SSL 证书的服务器的 AJAX HTTPS 请求,我仍然会返回 HTTP 状态代码 0。
  • 我还将有问题的代码行更改为“this.appView.setWebViewClient(new MyWebViewClient(this));”但是当我启动应用程序时出现致命异常。 叹息
  • 我发现this post 并使用 Cordova/PhoneGap 2.1.0 在 Simon 的答案中测试完全相同的代码,在调用 super.onPageStarted(...) 时也会导致错误。因此,我想我的问题在于我所采用的方法在 Cordova/PhoneGap 2.1.0 中根本不起作用。尽管如此,我认为必须有一种方法可以覆盖 Cordova/PhoneGap 2.1.0 中 CordovaWebViewClient 类的 onReceivedSslError(...) 方法。有什么新鲜想法吗?
  • 答案似乎很简单,但是您可以尝试使用 super.setWebViewClient 而不是使用它吗?编辑:刚刚意识到这个问题已经一个月了,但如果你仍然遇到问题,我仍然很想知道它是否是答案

标签: android cordova https self-signed


【解决方案1】:

这可以在以后的 Cordova 版本(我使用的是 2.2)上修复如下。如前所述,它在onPageStarted() 失败 - 这是因为它需要一个 appView,它为空,所以你得到一个 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()也是需要的

【讨论】:

  • 谢谢!幸运的是,最近 Cordova 的发布周期很短,我现在也在使用 2.2 版。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多