-
Notifications
You must be signed in to change notification settings - Fork 148
Description
从 .NET 调用 JavaScript
本部分仅适用于 Blazor WebAssembly应用。
默认情况下,JS 互操作调用是异步的,无论调用的代码是同步还是异步。 默认情况下,调用是异步的,以确保组件在 Blazor 托管模型 Blazor Server 和 Blazor WebAssembly 之间兼容。 在 Blazor Server 上,所有 JS 互操作调用必须是异步的,因为它们是通过网络连接发送的。
如果你确定你的应用只在 Blazor WebAssembly 上运行,则可以选择执行同步 JS 互操作调用。 这比进行异步调用的开销略少,并且可能会导致呈现周期更少,因为在等待结果时没有中间状态。
若要在 Blazor WebAssembly 应用中进行从 .NET 到 JavaScript 的同步调用,请将 IJSRuntime 强制转换为 IJSInProcessRuntime 以进行 JS 互操作调用:
protected T CallMethod(string method)
{
var js = (IJSInProcessRuntime)_jsRuntime;
return js.Invoke($"{NAMESPACE_PREFIX}.{_contextName}.{CALL_METHOD_ACTION}", Canvas, method);
//return CallMethodAsync(method).GetAwaiter().GetResult();
}
protected T CallMethod(string method, params object[] value)
{
var js = (IJSInProcessRuntime)_jsRuntime;
return js.Invoke($"{NAMESPACE_PREFIX}.{_contextName}.{CALL_METHOD_ACTION}", Canvas, method, value);
//return CallMethodAsync(method, value).GetAwaiter().GetResult();
}