当前位置: 首页 > article >正文

webview2加载本地页面

加载方式

通过导航到文件 URL 加载本地内容

使用方式:
webView->Navigate( L"file:///C:/Users/username/Documents/GitHub/Demos/demo-to-do/index.html");
但是这种方式存在一些问题,比如:

  1. 存在跨域问题(我加载的vue写得本地页面)

参考以下链接解决问题:

  1. WebView2 浏览器标志
  2. 全局总结

解决方法:

  1. 设置环境变量
    ​​​​​​![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=image.png&pos_id=img-Oiwwzsqe-1727069632557在这里插入图片描述
  2. 在创建WebView2控件之前,在代码中添加进程环境变量:
    SetEnvironmentVariable(L"WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS", L"--allow-file-access-from-files --disable-web-security");
  3. 创建WebView2时指定EnvironmentOptions,例如:
#include <WebView2EnvironmentOptions.h>
...
std::wstring args;
args.append(L"--allow-file-access-from-files --disable-web-security");
auto options = Microsoft::WRL::Make<CoreWebView2EnvironmentOptions>();
options->put_AdditionalBrowserArguments(args.c_str());
CreateCoreWebView2EnvironmentWithOptions(nullptr, nullptr, options.Get(),
	Callback<ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler>(
		//回调函数
        ...
    )
)

以上方式实测有效。

导航到 HTML 字符串的示例

个人测试加载html字符串,对于html中引入了css和js,加载不太友好。

使用虚拟主机名映射加载本地内容

推荐使用这种方式,加载速度比WebResourceRequested快(实测的确是快点),但是需要支持:ICoreWebView2_3

wil::com_ptr<ICoreWebView2_3> webView;
webView = webview.try_query<ICoreWebView2_3>();
if (!webView.get())
{
				
}
else
{
webView->SetVirtualHostNameToFolderMapping(L"demo", L"C:\\Github\\Demos\\demo-to-do", 
                                  COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND_DENY_CORS);
webView->Navigate(L"https://demo/index.html");
}

通过处理 WebResourceRequested 事件加载本地内容

这种方式是通过截获网络请求,然后返回需要的数据。以达到成功请求的假象。
代码见参考文档:
WebResourceRequested截获请求并发送回结果


http://www.kler.cn/news/318394.html

相关文章:

  • 「JavaScript深入」一文吃透JS的基本数据类型 Symbol
  • 统信服务器操作系统【Cron定时任务服务】
  • 安装程序不用鼠标,Windows也玩程序包管理存储库
  • 敏感词过滤
  • uni-app 多环境配置
  • 项目实战 (15)--- 代码区块重构及相关技术落地
  • 8月份,AI图像生成领域web端产品排行榜及产品是做什么的
  • UniApp一句话经验: px -> rpx动态转换和动态元素区域的获取
  • 前端-js例子:tab切换
  • 如何使用爬虫挖掘更多长尾关键词
  • HashMap五大核心问题总结
  • SpringMVC后续4
  • arm开发板通信
  • Goweb预防XSS攻击
  • 【算法笔记】二分查找 红蓝染色法
  • 前端——表格、列表标签
  • 【设计模式】创建型模式(三):单例模式
  • Rocky Linux 9安装mysqlclient库报错的解决方法
  • Sam Altman最新博文:智能时代将带来无限的智能和丰富的能源
  • LOGO设计新革命:5款AI工具让你秒变设计大师(必藏)
  • 16_Python的迭代器
  • 【Unity链接数据库01】Unity使用Oracle 数据库完成登录注册功能
  • Qt/C++ TCP调试助手V1.1 新增图像传输与接收功能(附发布版下载链接)
  • 每日算法1(快慢指针)
  • 实例讲解电动汽车故障分级处理策略及Simulink建模方法
  • 面试官:谈谈自己对IOC和AOP的理解? Part1
  • Unity 设计模式 之 结构型模式 -【适配器模式】【桥接模式】 【组合模式】
  • 前端读取PDF和DOCX文件(干货分享)
  • 基于深度学习的可再生能源的效率优化
  • thinkphp 做分布式服务+读写分离+分库分表+负载均衡(分区)(后续接着写)