我已经创建了一个web视图应用程序,显示的页面具有market://链接,但单击它们时,我会看到404屏幕,并显示协议不受支持的错误。我试着翻阅了文档,但找不到任何与此相关的内容。任何帮助都是非常感谢的。
发布于 2011-04-01 22:19:50
对我来说,JavaScript并不是一个解决方案,因为它不在我的控制之下。因此,如果您需要从应用程序端对此进行控制,那么有一个相对简单的解决方案:从WebViewClient
派生并使用WebView.setWebViewClient()
注入实现。您需要在WebViewClient
实现中覆盖的就是shouldOverrideUrlLoading
方法,如下所示:
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url != null && url.startsWith("market://")) {
view.getContext().startActivity(
new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
return true;
} else {
return false;
}
}
对我来说,这很好用。
发布于 2015-01-09 23:00:15
希望这能对你有所帮助
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
if (url.startsWith("market://")||url.startsWith("vnd:youtube")||url.startsWith("tel:")||url.startsWith("mailto:"))
{
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
return true;
}
else{
view.loadUrl(url);
return true;
}
}
发布于 2010-08-27 18:53:48
为了让链接起作用,你必须在你的设备/模拟器上安装市场应用程序。此外,您的应用程序还需要请求访问网络的权限。
UPD:作为一种变通方法,您可以从webview中调用java代码,例如,如果您生成如下链接:
<a href="javascript:go('market://your.path.to.market.app')">..</a>
定义一个名为go()的javascript函数:
<script type="text/javascript">
function go(link) {
if (handler) {
handler.go(link);
} else {
document.location = link;
}
}
</script>
然后,您可以将一个处理程序对象传入WebView:
webview.addJavascriptInterface(new Handler() {
@Override
public void go(String marketUrl) {
//start market intent here
}
}, "handler");
处理程序接口可以定义如下:
public interface Handler{
public void go(String url);
}
https://stackoverflow.com/questions/3583264
复制相似问题