用WebView访问证书有问题的SSL网页以及在文件关联窗口中选择浏览器后,浏览器如何识别到该连接地址

近期在做手机浏览器的项目,做手机浏览器肯定用到的是WebView,这两天遇到了两个问题,已解决。问题如下:

问题一:比如在手机某个文件里面点击一个连接,会出现文件关联的窗口,这个窗口里面会列出很多你手机已安装的浏览器,比如手机自带的浏览器或者QQ浏览器等等,当然也有自己做的浏览器,当点击自己做的浏览器后,期望的结果当然是打开自己的浏览器,然户浏览器里面会加载此链接,然后问题就是打开的浏览器如何识别到将要打开的这个链接,至于如何让自己通过WebView做的浏览器出现在关联的窗口中,通俗的说,就是让手机识别到自己做的App属于浏览器。需要在AndroidMefiest.xml里面主Activity里面增加如下代码便可:

             <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:scheme="http" />
                <data android:scheme="https" />
                <data android:scheme="about" />
                <data android:scheme="javascript" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />

                <data android:scheme="http" />
                <data android:scheme="https" />
                <data android:scheme="inline" />
                <data android:mimeType="text/html" />
                <data android:mimeType="text/plain" />
                <data android:mimeType="application/xhtml+xml" />
                <data android:mimeType="application/vnd.wap.xhtml+xml" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:scheme="file" />
            </intent-filter>

这样就可以被识别到属于浏览器,接下来要做的就是如何让自己的浏览器接收到将要打开的连接,很简单,这么一句:

if (intent.ACTION_VIEW.equals(action)) {
  String intent_url = intent.getDataString();
}

intent.getDataString所接收到的便是将要打开的那个连接地址,然后用WebView加载便可!

问题二:

在WebView里加载SSL网页很正常,也没什么难度。但如果要加载的SSL页面的证书有问题,比如过期、信息不正确、发行机关不被信任等,WebView就会拒绝加载该网页。PC上的浏览器会弹出证书错误的对话框,提示你是否要无视错误继续浏览。实际上在WebView里也可以这样做,以实现加载证书有问题的页面。

WebView webview = (WebView) findViewById(R.id.webview);
webview.setWebViewClient(new WebViewClient() {
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {

        // *** NEVER DO THIS!!! ***
        // super.onReceivedSslError(view, handler, error);

        // let's ignore ssl error
        handler.proceed();
    }
}

只需像这样重载WebViewClientonReceivedSslError()函数并在其中执行handler.proceed(),即可忽略SSL证书错误,继续加载页面。

这里要注意的是,千万不要调用super.onReceivedSslError()。这是因为WebViewClientonReceivedSslError()函数中包含了一条handler.cancel()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值