希望 WebView2浏览器窗口-发送消息 能支持发送本地文件到浏览器窗口

功能建议 · 163 次浏览
FaniX 创建于 23天23小时前

目前版本的webview2的PostWebMessageAsJson(string webMessageAsJson, System.Collections.Generic.List<object> additionalObjects)方法支持一个additionalObjects参数,可以用来向浏览器窗口发送本地文件。

具体说来,additionalObject的内容应为CoreWebView2FileSystemHandle列表,可以通过wv.CoreWebView2.Environment.CreateWebFileSystemFileHandlewv.CoreWebView2.Environment.CreateWebFileSystemDirectoryHandle由路径字符串创建。如果有Webview2对象wv和文件路径列表paths,可以在C#中通过

wv.CoreWebView2.PostWebMessageAsJson(
  JsonConvert.SerializeObject(new {
    op = "customMessage"
  }),
  paths.Select(x => {
    string path = (string)x;
    if(File.Exists(path))
      return wv.CoreWebView2.Environment.CreateWebFileSystemFileHandle(path, CoreWebView2FileSystemHandlePermission.ReadOnly);
    else if(Directory.Exists(path))
      return wv.CoreWebView2.Environment.CreateWebFileSystemDirectoryHandle(path, CoreWebView2FileSystemHandlePermission.ReadOnly);
    return null;
  }).ToList<object>()
);

的方式将文件(夹)句柄发送到webview窗口。

窗口可以从chrome.webviewmessage事件中的event.additionalObjects中以FileSystemFileHandle的形式获取文件(夹)句柄,从而读取本地文件。

希望 WebView2浏览器窗口 的 发送消息 模块可以增加一个参数,可以将用户提供的文件列表发送给webview2窗口,从而能在不通过剪贴板中转、不额外使用C#脚本的情况下向webview窗口提供文件。

FaniX 最后更新于 2025/9/26

回复内容
CL 23天8小时前
#1

好的,我看下

ZTOA10 9天2小时前
#3

WebView2映射貌似没法做到自动更新映射路径,只能覆盖某个固定目录,不能跨目录自动生效。选择新文件时,希望可以自动更新映射目录为新文件所在目录。

回复主贴