近期在做手机浏览器的项目,做手机浏览器肯定用到的是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();
}
}
只需像这样重载WebViewClient的onReceivedSslError()函数并在其中执行handler.proceed(),即可忽略SSL证书错误,继续加载页面。
这里要注意的是,千万不要调用super.onReceivedSslError()。这是因为WebViewClient的onReceivedSslError()函数中包含了一条handler.cancel()
本文讨论了手机浏览器项目中使用WebView时遇到的两个问题:如何让自定义浏览器被系统识别为浏览器,并如何处理加载SSL网页时的证书错误。文中提供了相应的解决方法,包括在AndroidManifest.xml中添加特定的intent-filter来识别自定义浏览器,以及重载WebViewClient的onReceivedSslError()函数来忽略SSL证书错误。
2064

被折叠的 条评论
为什么被折叠?



