目前版本的webview2的PostWebMessageAsJson(string webMessageAsJson, System.Collections.Generic.List<object> additionalObjects)
方法支持一个additionalObjects
参数,可以用来向浏览器窗口发送本地文件。
具体说来,additionalObject
的内容应为CoreWebView2FileSystemHandle
列表,可以通过wv.CoreWebView2.Environment.CreateWebFileSystemFileHandle
或wv.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.webview
message
事件中的event.additionalObjects
中以FileSystemFileHandle
的形式获取文件(夹)句柄,从而读取本地文件。
希望 WebView2浏览器窗口 的 发送消息 模块可以增加一个参数,可以将用户提供的文件列表发送给webview2窗口,从而能在不通过剪贴板中转、不额外使用C#脚本的情况下向webview窗口提供文件。