【发布时间】:2017-02-06 17:18:39
【问题描述】:
我有一个带有 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 的 shouldOverrideUrlLoading() 方法,所以像这样设置一个 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 intent://
在 Facebook 原生应用中打开直播我怎样才能正确对待这个 uri?!
在我的测试中:
- 如果我不添加我的自定义 WebViewClient(从不调用 setWebViewClient()),它会完美运行!
- 如果我不启动新 Activity 并且返回 false,我没有崩溃,但我可以看到 iframe 中加载的 Chrome 错误:ERR_UNKNOWN_URL_SCHEME!
最奇葩的是:
- 为什么如果我只添加这个简单的行:
webview.setWebViewClient(new WebViewClient());我有 ERR_UNKNOWN_URL_SCHEME,如果我删除它就可以工作!!!?
感谢您的帮助。
【问题讨论】:
-
如果你不调用setWebViewClient,它会在你手机的默认浏览器上加载吗?
-
如果我不调用 setWebViewClient,一切正常:新 url (http://) 加载到我手机的默认浏览器中,并在 fb 应用程序中打开 Facebook Live Stream (intent://) 的 url。
-
这就是你想要的行为? (如果 url 是您自己的域,还要做什么?)
-
是的,我想打开我的 web 视图之外的所有 url,我必须为点击的特定域做特定的事情。
标签: android facebook android-intent webview