网页打开Android app ERR_UNKNOWN_URL_SCHEME 问题解决

本文介绍了在Android中使用WebView加载网页时遇到的问题及解决方案。通过调整WebViewClient与WebChromeClient的设置,避免了调用第三方浏览器,实现了直接在WebView中打开网页的功能。

网上查如何实现html如何打开Android App时(至于怎么实现网上的例子太多了,就不说了),照着他们的方法做,但是打不开,后来发现调用第三方浏览器可以打开,觉的应该是webview的设置问题。
想要用自己webview,不调第三方的app打开网页需要使用下面这段代码:
web_view.setWebViewClient(new WebViewClient(){
  @Override
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
  view.loadUrl(url);
  return true;
}
});
但是会出现网页无法打开的错误,这是个很头疼的问题。
后来发现有个函数setWebChromeClient这个方法,咦,好使了,不会出现问题了,并且也不会调用其他的浏览器了。
首先确保一下有网。
所以调用:
web_view.setWebChromeClient(new WebChromeClient());
就能解决了
不要调用 web_view.setWebViewClient() 即使两个方法都实现了还是会出问题

<think>嗯,用户遇到了在Chrome浏览器中访问自定义URL方案时出现net::ERR_UNKNOWN_URL_SCHEME错误的问题,想要解决。我需要先理解这个错误的原因,然后根据已有的引用内容整理解决方案。 首先,根据引用[1]和[2],这个错误通常是因为URL缺少了正确的协议头,比如http://或https://。例如,如果直接使用"www.example.com"而没有协议,Chrome就无法识别,应该改为"http://www.example.com"。所以第一步是检查URL是否完整。 然后,引用[3]和[5]提到,处理自定义URL方案(比如myapp://)时,需要在WebView中设置shouldOverrideUrlLoading方法,判断如果是http或https则用WebView加载,否则启动外部应用。这适用于安卓开发的情况。用户可能需要在自己的WebView代码中添加这样的逻辑,避免尝试直接加载自定义协议,导致浏览器无法处理。 另外,引用[5]还提到,如果自定义URL需要调用外部应用,确保该应用已安装,并且在shouldOverrideUrlLoading中正确处理跳转。如果没有安装,可能需要引导用户下载或提供备用方案。 另外,引用[4]提到的ERR_INCOMPLETE_CHUNKED_ENCODING可能和服务器响应有关,但用户的问题主要是ERR_UNKNOWN_URL_SCHEME,所以暂时可以忽略这个引用。 总结下来,解决方案应该是: 1. 检查URL格式,确保以http/https开头。 2. 对于WebView,添加代码处理自定义协议,跳转到外部应用。 3. 确保目标应用已安装,处理可能的异常情况。 需要分步骤解释,并给出示例代码,如安卓的WebView配置。同时,可能需要提醒用户其他注意事项,比如测试不同浏览器、协议注册是否正确等。</think>要修复Chrome中的$net::ERR\_UNKNOWN\_URL\_SCHEME$错误,需根据应用场景选择以下解决方案: ### 一、常规网页场景 1. **补全协议前缀** 确保所有URL以$http://$或$https://$开头,例如: ```javascript // 错误示例:缺少协议前缀 url = "www.example.com" // 正确示例: url = "https://www.example.com" // 添加协议头[^2] ``` ### 二、安卓WebView场景 2. **拦截自定义协议** 在WebView中通过$shouldOverrideUrlLoading$处理自定义协议: ```java webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith("http:") || url.startsWith("https:")) { // 允许WebView加载标准协议 return false; } else { // 自定义协议跳转外部应用 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent); return true; // 拦截请求[^3][^5] } } }); ``` ### 三、其他注意事项 - ✅ **协议白名单**:在APP中预定义允许的协议类型(如$tel:$、$mailto:$) - ✅ **目标应用检测**:调用自定义协议前检查目标应用是否安装(如支付宝/微信跳转) - ✅ **错误兜底**:当协议调用失败时显示引导提示或跳转备用页面 ### 四、特殊场景 3. **Chrome浏览器直接访问** 若需在浏览器中直接打开$custom://$链接: ```html <!-- 添加协议类型声明 --> <a href="intent://example.com#Intent;scheme=custom;package=com.example.app;end"> 打开自定义协议 </a> ```
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值