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

功能建议 · 49 次浏览
FaniX 创建于 3天19小时前

目前版本的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 3天4小时前
#1

好的,我看下

回复主贴