在uwp c#Windows运行时组件项目中,我想公开一个webview js可以通过一些回调调用它的api。 所以我正在尝试:
// c#
[Windows.Foundation.Metadata.AllowForWeb]
public sealed class xx{
public void setOnChange(string name,System.Action action) {
xxx
}
}
// js
windows.xx.setOnChange("js",function(){xxx});
然后我得到'system.Action'不是有效的Windows运行时参数类型错误。
然后我尝试另一种方式:
//c#
public delegate void Action();
[Windows.Foundation.Metadata.AllowForWeb]
public sealed class xx{
public void setOnChange(string name,Action action) {
xxx
}
}
// js
windows.xx.setOnChange("js",function(){xxx});
c#可以编译,并且setOnChange被调用,但是js不被调用。
答案 0 :(得分:1)
最后我找到了解决方法:
//c#
[Windows.Foundation.Metadata.AllowForWeb]
public sealed class xx{
public void setOnChange(string name,EventHanlder<Object> action) {
xxx
}
}
// js
windows.xx.setOnChange("js",function(){xxx});
我猜想EventHanlder
Ps:我已阅读https://docs.microsoft.com/en-us/windows/uwp/winrt-components/raising-events-in-windows-runtime-components的文档。 然后,我发现可以使用带有事件处理程序的类包装来完成。它在js和c#中都有很多代码,然后我尝试将事件处理程序嵌入参数中,然后开始工作。 uwp的隐藏/非文档功能?