Har*_*rry 6 javascript c# interop blazor
首先,我的JS:
class MyClass {
static myMethod() {
alert("TEST");
}
}
Run Code Online (Sandbox Code Playgroud)
我的 JS 运行时注入如下:
[Inject] protected IJSRuntime Js { get; set; }
Run Code Online (Sandbox Code Playgroud)
我想调用这样的静态方法:
Js.InvokeVoidAsync("MyClass.myMethod");
Run Code Online (Sandbox Code Playgroud)
但我收到错误:
Microsoft.JSInterop.JSException:在“窗口”中找不到“MyClass”。
是否有一个理智、合理的方法来解决这个问题,或者仅通过将 window.MyClass = MyClass 添加到我的 JS 中?
是的,向窗口对象注册您的方法是正确的。
源代码的相关部分可以在这里找到:
https://github.com/aspnet/Extensions/tree/master/src/JSInterop
仔细一看你会发现:
invokeJSFromDotNet: (identifier: string, argsJson: string) => { ... }
Run Code Online (Sandbox Code Playgroud)
在哪里
@param 标识符 标识要调用的全局可访问函数。
看一下,findJSFunction您会看到检查给定标识符是否已在窗口对象中注册的部分,如果没有,则会生成您看到的错误:
function findJSFunction(identifier: string): Function {
(...)
let result: any = window;
let resultIdentifier = 'window';
let lastSegmentValue: any;
identifier.split('.').forEach(segment => {
if (segment in result) {
lastSegmentValue = result;
result = result[segment];
resultIdentifier += '.' + segment;
} else {
throw new Error(`Could not find '${segment}' in '${resultIdentifier}'.`);
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3095 次 |
| 最近记录: |