C#无法收到chrome.webview.postMessage发送的消息

使用问题 · 32 次浏览
FaniX 创建于 3天8小时前

我想在webview中获取文件的真实路径,技术上可以通过webview和C#之间postMessage实现,即通过C#中的WebMessageReceived事件处理函数捕获webview浏览器中window.chrome.webview.postMessageWithAdditionalObjects传递的文件对象(参见这篇教程

但是我在Quicker的webview窗口里面始终无法通过WebMessageReceived收到window.chrome.webview.postMessageWithAdditionalObjects或者window.chrome.webview.postMessage发送的消息,可以看这个测试动作

在测试动作里,等待C#脚本加载完成后,webview可以获取C#中通过PostWebMessageAsJson发送的消息(经过测试也可以收到C#提供的文件系统句柄,只要使用PostWebMessageAsJson(String, List<Object>)重载,第二个参数是文件系统句柄列表,可以通过CreateWebFileSystemFileHandle创建,说明Quicker提供的webview版本是支持传递文件句柄的),C#也可以Webview的捕获其他事件,如WindowCloseRequested(按窗口里的close按钮),但C#就是无法获取webview发送过来的消息(按poseMessage按钮),WebMessageReceived始终不会触发,不知道是哪里的问题。


回复内容
CL 3天0小时前
#1

研究了一下,这是因为quicker内部也有一个对这个消息的监听和处理,内部会按json解析,如果内容不是json格式,会出错,导致后面的自定义事件代码不被执行。。 

window.chrome.webview.postMessage 发送消息需要直接发送js对象,{op:'自定义指令', data:...}

目前quicker内部使用了setVar和close两个op值,其它值会忽略。 

所以发送消息的代码用这样的形式:

  chrome.webview.postMessage({ op1: "test" });


回复主贴