如何支持Android webview中的其他协议?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

我创建了一个Web视图应用程序,显示的页面显示了市场:,但点击它们后,我得到了404屏幕以及该协议不受支持的错误。我试过浏览文档,但无法找到与此相关的任何内容。

提问于
用户回答回答于

对我来说,JavaScript并不是一个解决方案,因为HTML不在我的控制之下。所以如果你需要从应用程序端来控制它,那么就有一个相对简单的解决方案:使用派生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;
    }
}
用户回答回答于

你可以从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");

Handler接口可以定义如下:

   public interface Handler{

    public void go(String url);

}

扫码关注云+社区