aardio WebView 同源策略与跨域终极解决方案

aardio WebView 同源策略与跨域终极解决方案

结论:aardio 的 web.view(基于微软 WebView2/Chromium 内核)默认开启同源策略


一、核心用法(一行代码关闭同源)

aardio

复制代码
import win.ui;
import web.view;

/*DSG{{*/
var winform = win.form(text="Vue3 M3U8 播放器";right=1200;bottom=700;border="thin")
winform.add()
/*}}*/

// 关键:第三个参数传入 --disable-web-security 即可完全关闭同源策略
var wb = web.view(winform,,"--disable-web-security");

// 加载你 Vue 打包后的 dist 文件夹
wb.go("/dist/index.html");

winform.show();
return winform.wait();

✅ 效果

  • 前端代码不需要任何修改 ,直接写原视频地址 http://127.0.0.1:8899/live/stream.m3u8
  • 所有 m3u8 索引文件、.ts 分片、AJAX 请求都不会再报跨域错误
  • 开发环境和打包成 EXE 后完全一致,没有任何差异
  • 不需要修改 8899 端口视频服务的任何配置

二、为什么这是你的最优解

对比你之前了解的所有方案:

表格

方案 开发环境 生产环境 前端修改 视频服务修改 复杂度
Vue CLI 代理 ✅ 可用 ❌ 失效 需要改地址 不需要
Nginx 反向代理 ✅ 可用 ✅ 可用 不需要 不需要
视频服务加 CORS ✅ 可用 ✅ 可用 不需要 需要
aardio 关闭同源 ✅ 可用 ✅ 可用 零修改 不需要 极低

特别适合你的场景

  • 视频服务是第三方程序启动的,你无法修改其配置
  • 最终要打包成桌面应用,不是部署到公网
  • 不想每次打包都改前端地址或配置代理

三、完整工程化示例(推荐)

1. 项目目录结构

已生成代码

2. 完整 main.aardio 代码

aardio

复制代码
import win.ui;
import web.view;
import wsock.tcp.simpleHttpServer;

/*DSG{{*/
var winform = win.form(text="本地视频播放器";right=1200;bottom=700;border="thin")
winform.add()
/*}}*/

// 启动本地 HTTP 服务器托管 Vue 静态文件(比 file:// 协议更稳定,无额外限制)
var httpServer = wsock.tcp.simpleHttpServer("/dist");

// 创建 WebView2 并关闭同源策略
var wb = web.view(winform,,"--disable-web-security");

// 加载本地服务器上的 Vue 页面
wb.go(httpServer.startUrl());

// 可选:开启开发者工具(F12)方便调试
wb.enableDevTools(true);

// 窗口关闭时自动停止 HTTP 服务器
winform.onClose = function(){
    httpServer.stop();
}

winform.show();
return winform.wait();

3. 前端 Vue 代码(完全不用改)

javascript

复制代码
// 直接写原视频地址,不需要加任何代理前缀
const videoUrl = "http://127.0.0.1:8899/live/stream.m3u8";

// hls.js 正常初始化即可
if (Hls.isSupported()) {
  const hls = new Hls();
  hls.loadSource(videoUrl);
  hls.attachMedia(videoElement);
}

四、重要注意事项

  1. 安全性说明

    • --disable-web-security 会关闭浏览器的同源策略,仅适用于本地桌面应用
    • 如果你的应用只访问自己的本地服务(127.0.0.1:8899),没有任何安全风险
    • 绝对不要在公网网页中使用这个参数
  2. 不需要额外参数

    • 很多网上教程会让你加 --user-data-dir,aardio 会自动为每个 webview 实例创建独立的用户数据目录,不需要手动添加
    • 也不需要加 --allow-file-access-from-files 等其他参数
  3. 内核区分

    • web.view:基于 WebView2(Edge/Chromium 内核),推荐使用,性能好,支持所有现代前端特性
    • web.form:基于旧版 IE 内核,不推荐,也不支持 --disable-web-security 参数
  4. 打包发布

    • 直接在 aardio 中点击「发布」→「编译为独立 EXE」
    • 打包后的 EXE 可以在任何 Windows 10 及以上系统运行,不需要安装任何依赖
    • 体积很小,一般只有几 MB

五、如果不想完全关闭同源(可选)

如果你出于安全考虑不想完全关闭同源策略,也可以用 aardio 的原生桥接代理功能:

aardio

复制代码
// aardio 端
wb.external = {
    fetchVideo = function(url){
        import inet.http;
        return inet.http().get(url);
    }
}

// 前端 JS 端
async function loadM3u8(url) {
    const m3u8Content = await aardio.fetchVideo(url);
    // 处理 m3u8 内容
}
相关推荐
游戏开发爱好者89 小时前
iOS应用性能监控:Pre-Main与Main函数耗时分析及Time Profiler使用教程
android·ios·小程序·https·uni-app·iphone·webview
梦想不只是梦与想21 小时前
鸿蒙与 H5 通信使用的方法及原理
harmonyos·鸿蒙·webview
2501_915909061 天前
完整指南:如何将iOS应用上架到App Store
android·ios·小程序·https·uni-app·iphone·webview
号码认证服务2 天前
给用户打电话,怎么在对方手机显示为“XX证券”?号码认证办理步骤
android·运维·服务器·ios·智能手机·iphone·webview
2501_915909063 天前
全面解析前端开发中常用的浏览器调试工具及其使用场景
android·ios·小程序·https·uni-app·iphone·webview
小四的小六3 天前
WebView安全防护实战:从XSS到中间人攻击,我的踩坑与防御总结
javascript·webview
游戏开发爱好者84 天前
使用Fiddler设置HTTPS抓包诊断Power Query网络问题
android·ios·小程序·https·uni-app·iphone·webview
小四的小六4 天前
WebView 从0到1搭建线上性能监控体系
javascript·webview
Lsx_5 天前
H5 嵌入微信 / 支付宝 / 抖音小程序 WebView:调用原生能力完整方案
前端·微信小程序·webview