修改WebView默认加载方式

本文解决了一个常见问题:如何确保网页能在Android应用内的WebView组件中加载,而不是被系统默认浏览器拦截。通过重写shouldOverrideUrlLoading方法,实现了网页内容在WebView中的正确展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    今天在做webview加载Jquery Mobile开发的网页的时候出现了一个问题,使用WebView的LoadUrl()的方法 加载网页的时候不是在WebView显示已经加载的页面,而是在系统的


浏览器中打开的,后来经查资料得知,原来Android中的WebView在加载网页的时候,默认是使用第三方框架或者系统自带的浏览器打开网页的,如果想让网页在webview加载则需


要重写webview的shouldOverrideUrlLoading方法,代码如下:



webview=(WebView)this.findViewById(R.id.mywebview);
webview.loadUrl("http://192.168.138.220:8080/zq/jquery_mobile.html");
 //覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开
webview.setWebViewClient(new WebViewClient(){
   @Override
   public boolean shouldOverrideUrlLoading(WebView view, String url) {
    // TODO Auto-generated method stub
    view.loadUrl(url);
    //返回值为true的时候是使用webview加载网页的,
    //默认为false是使用第三框架或者系统浏览器打开的
    return true;
   }
});


设置完成之后重新编译,运行就可以了。

### Webview2 加载失败的原因分析 Webview2 是 Microsoft 提供的一个基于 Chromium 的控件,用于在 Windows 应用程序中嵌入现代浏览器体验。然而,在实际开发过程中,可能会遇到加载失败的情况。以下是可能导致 Webview2 加载失败的一些常见原因: 1. **目标 URL 不可用** 如果目标网站不可访问或者存在 DNS 解析问题,则会引发加载失败。这可能是因为服务器端配置错误或网络连接不稳定[^1]。 2. **缓存设置不当** 类似于传统 WebView,如果 Webview2 缓存机制未正确配置,也可能导致页面加载缓慢甚至完全失败。建议启用合适的缓存策略来提高性能并减少不必要的网络请求。 3. **JavaScript 或 DOM 存储支持不足** 当 JavaScript 被禁用或 DOM Storage 配置不当时,某些依赖这些技术的功能将无法正常运行。因此需要确认是否启用了必要的脚本执行权限以及存储空间分配[^2]。 4. **HTTPS 安全协议冲突** 若应用试图通过 HTTP 协议而非 HTTPS 访问资源,特别是在较新的 Android 版本上,由于系统默认拒绝非加密通信,会出现 `net::ERR_CLEARTEXT_NOT_PERMITTED` 错误消息。尽管此情况主要针对移动平台上的 WebView 控件描述,但在桌面环境中也需注意类似的 SSL/TLS 设置要求[^3]。 5. **环境兼容性和 Edge 浏览器组件版本过低** 使用 Webview2 之前必须安装对应的操作系统更新包及其所需的 Microsoft Edge (Chromium) 组件。如果本地机器缺少最新版的支持文件,则初始化过程本身就会报错终止。 --- ### Webview2 加载失败的具体解决方案 为了有效应对上述提到的各种潜在障碍因素,可以采取如下措施加以改进: #### 方法一:验证目标站点可达性 确保所要打开的目标网址处于活动状态,并且可以从当前设备成功解析到 IP 地址。可以通过简单的 ping 测试命令初步判断连通状况。 ```cmd ping www.example.com ``` #### 方法二:调整缓存行为 修改 Webview2 实例对象的相关属性参数以适应具体业务需求场景下的数据保留期限长短设定。例如下面这段 C# 示例代码展示了如何开启磁盘级持久化缓存功能: ```csharp var webView = new CoreWebView2Environment(); await webView.CreateAsync(); // Enable persistent cache on disk. webView.BrowserProcessOptions.AdditionalBrowserArguments += "--disk-cache-dir=C:\\Path\\To\\Cache"; ``` #### 方法三:激活 JavaScript 和其他高级特性开关 明确允许网页内的动态内容渲染操作,包括但不限于 JS 执行许可授予、sessionStorage/localStorage 数据保存区域解锁等等动作均不可或缺。 ```javascript CoreWebView2Settings settings; settings.IsScriptEnabled = true; // Allow running scripts within the web content area. settings.AreDefaultScriptDialogsEnabled = false; // Optionally customize alert/confirm dialogs appearance instead of default ones provided by browser engine itself. // Ensure that local storage is available too. if (!coreWebView.CoreWebView2.Settings.IsLocalStorageEnabled) { coreWebView.CoreWebView2.Settings.IsLocalStorageEnabled = true; } ``` #### 方法四:强制实施安全传输标准 对于那些仍然坚持采用旧式纯文本形式传送敏感资料的应用场合来说,应当尽快迁移到更加可靠的 TLS 加密通道上来规避风险隐患。与此同时还可以借助编程手段拦截非法明码流量企图。 ```xml <application android:usesCleartextTraffic="false"> </application> ``` > 注:以上 XML 片段适用于安卓项目清单定义部分;而对于 UWP/WPF 平台而言则无需显式声明此类选项因为它们已经内置处理好了相应逻辑环节。 #### 方法五:升级至最新稳定发行版本 始终跟踪官方发布的补丁说明文档及时获取修复已知缺陷的新迭代成果从而保障整体框架架构健壮可靠程度达到预期水平之上。 --- ### 总结 综上所述,当面对 Webview2 出现加载异常现象之时,应该综合考虑多方面的影响要素逐一排查定位根本诱因所在之处进而施加针对性强效的治理对策予以彻底根除之患。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值