我有一个带有Facebook Live Stream简单HTML的WebView:
<html>
<head></head>
<body>
<iframe allowfullscreen="true" allowtransparency="true" frameborder="0" height="315" scrolling="no" src="https://www.facebook.com/plugins/video.php?href=https%3A%2F%2Fwww.facebook.com%2Fnico.up.9%2Fvideos%2F1895877650644648%2F&show_text=0&width=560" style="border:none;overflow:hidden" width="560"></iframe>
</body>
</html>
我必须覆盖我的WebView的shouldOverrideUrlLoad((方法,所以像这样设置一个WebViewClient:
webview.setWebViewClient(new WebViewClient()
{
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
if (url.contains("mydomain.com")) {
//I must do something in my app, without to load url
} else {
//else i want open native Android browser
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
browserIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getActivity().startActivity(browserIntent);
}
return true;//never to load the url in my webview
}
});
问题是如果我有一个Facebook直播,我有一个崩溃!
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=intent://video/?id={10155200044259063}&ref=m_embedded_video/ }
实际上,Facebook的iframe希望使用自定义URI在Facebook本机应用程序中打开实时 intent://
我如何正确对待这个 uri?!
在我的测试中:
- 如果我不添加我的自定义WebViewClient(永远不要调用setWebViewClient(((,它就可以完美地工作!
- 如果我不启动新活动并且返回 false,我没有崩溃,但我可以看到 iframe 中的 Chrome 错误加载:ERR_UNKNOWN_URL_SCHEME!
最令人好奇的是:
- 为什么如果我只添加这简单的行:
webview.setWebViewClient(new WebViewClient());
我有ERR_UNKNOWN_URL_SCHEME,如果我删除它是工作!!?
谢谢你的帮助。
回答您的一个问题
为什么如果我只添加这个简单的行:
webview.setWebViewClient(new WebViewClient());
我有ERR_UNKNOWN_URL_SCHEME,如果我删除它是 工作!!!?
请注意,如果您不调用 setWebViewClient(new WebViewClient())
,则 WebView 的默认行为是启动处理 URL 的应用程序。否则,使用 WebViewClient
类的实例设置客户端将在 WebView
对象中加载 URL。
https://developer.android.com/guide/webapps/webview.html#HandlingNavigation
因此,如果您调用 setWebViewClient(new WebViewClient())
,则实际上是在执行类似于在 shouldOverrideUrlLoading()
中返回false
的代码。因此,给您相同的ERR_UNKNOWN_URL_SCHEME
错误。