首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Android webview中支持其他协议

在Android webview中支持其他协议
EN

Stack Overflow用户
提问于 2010-08-27 18:27:36
回答 6查看 24.6K关注 0票数 22

我已经创建了一个web视图应用程序,显示的页面具有market://链接,但单击它们时,我会看到404屏幕,并显示协议不受支持的错误。我试着翻阅了文档,但找不到任何与此相关的内容。任何帮助都是非常感谢的。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-04-01 22:19:50

对我来说,JavaScript并不是一个解决方案,因为它不在我的控制之下。因此,如果您需要从应用程序端对此进行控制,那么有一个相对简单的解决方案:从WebViewClient派生并使用WebView.setWebViewClient()注入实现。您需要在WebViewClient实现中覆盖的就是shouldOverrideUrlLoading方法,如下所示:

代码语言:javascript
复制
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;
    }
}

对我来说,这很好用。

票数 43
EN

Stack Overflow用户

发布于 2015-01-09 23:00:15

希望这能对你有所帮助

代码语言:javascript
复制
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;
        }
}
票数 3
EN

Stack Overflow用户

发布于 2010-08-27 18:53:48

为了让链接起作用,你必须在你的设备/模拟器上安装市场应用程序。此外,您的应用程序还需要请求访问网络的权限。

UPD:作为一种变通方法,您可以从webview中调用java代码,例如,如果您生成如下链接:

代码语言:javascript
复制
<a href="javascript:go('market://your.path.to.market.app')">..</a>

定义一个名为go()的javascript函数:

代码语言:javascript
复制
<script type="text/javascript">
   function go(link) {
     if (handler) {
           handler.go(link);
         } else {
           document.location = link;
         }
   }
</script>

然后,您可以将一个处理程序对象传入WebView:

代码语言:javascript
复制
webview.addJavascriptInterface(new Handler() {
        @Override
        public void go(String marketUrl) {
                         //start market intent here
        }
    },  "handler");

处理程序接口可以定义如下:

代码语言:javascript
复制
   public interface Handler{

    public void go(String url);

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3583264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档