Blazor JS Interop核心是IJSRuntime接口,推荐异步调用;JS函数需挂载全局对象,C#通过DotNetObjectReference支持JS回调.NET方法,注意生命周期管理与错误处理。
Blazor 中调用 JavaScript(JS Interop)是混合开发的关键能力,核心在于 IJSRuntime 接口。它支持同步和异步调用,但推荐统一使用异步方式(InvokeAsync),避免阻塞主线程,也兼容 Server 与 WebAssembly 模式。
JS 函数必须挂载在全局对象(如 window 或 self)上,才能被 C# 发现。不推荐直接写内联脚本,应放在 wwwroot/js/interop.js 并在 index.html 或 _Host.cshtml 中引用。
例如,在 interop.js 中定义:
window.showAlert = (message) => alert(message);
window.getScreenWidth = () => window.screen.width;
window.invokeDotNet = (dotNetObj, data) => dotNetObj.invokeMethodAsync('HandleFromJs', data);
C# 端注入 IJSRuntime 后即可调用:
@inject IJSRuntime JSRuntime
@code {
private async Task ShowMessage() => await JSRuntime.InvokeVoidAsync("showAlert", "Hello from Blazor!");
private async TaskGetWidth() => await JSRuntime.InvokeAsync ("getScreenWidth");
}
使用 DotNetObjectReference.Create() 包装 C# 实例,传给 JS。该引用可跨多次 JS 调用复用,但需手动释放(尤其在组件销毁时)。
OnInitialized 初始化:objRef
= DotNetObjectReference.Create(this);
Dispose 或 OnDisposing 中释放:objRef?.Dispose();
dotNetObj.invokeMethodAsync('MethodName', ...) 调用标记 [JSInvokable] 的 public 方法注意:方法名默认为 C# 方法名,也可用 [JSInvokable("customName")] 自定义。
JS Interop 支持基本类型、字符串、JSON 对象(自动序列化/反序列化)、IJSInProcessObjectReference(仅 WebAssembly 同步场景)。
InvokeAsync 直接映射JSException;C# 异常 → JS 端收到拒绝的 PromiseList 或 T[],JS 侧用数组操作即可ArrayBuffer 或流式处理console.log;C# 端启用 try/catch 捕获 JSException 并打印 e.Message
IsDisposed 判断基本上就这些。JS Interop 不复杂但容易忽略上下文和生命周期,理清“谁调谁”“数据在哪”“何时释放”,就能稳稳用好。
# javascript
# java
# html
# js
# json
# 浏览器
# ai
# win
# 常见问题
# 浏览器端
# c#
# .net
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
C++如何解析JSON数据?(nlohmann/json库示例)
Win11如何更改任务栏颜色 Win11自定义任务栏背景色【美化】
Win11怎么设置鼠标宏_Win11鼠标按键自定义编程教程【详解】
如何使用Golang实现基本类型比较_Golang比较操作符使用方法
php8.4匿名类怎么用_php8.4匿名类创建与使用场景【介绍】
Windows蓝屏错误0x00000023怎么修复_FAT文件系统错误处理
Win11截图快捷键是什么_Win11自带截图工具使用技巧【汇总】
如何在Golang中捕获JSON序列化错误_Golangjson.Marshal错误处理示例
Mac如何设置动态壁纸?(让桌面动起来)
c++如何使用std::bitset进行位图算法_c++ 快速查找与大规模数据排重【方法】
如何使用正则表达式精确匹配最多含一个换行符的 start-end 区段
Linux如何使用grep搜索文件内容_Linux下正则表达式匹配与查找技巧【指南】
如何在Windows上设置闹钟和计时器_系统自带的时钟应用全攻略【生活技巧】
Win11怎样安装剪映专业版_Win11安装剪映教程【步骤】
如何在Golang中实现服务熔断与限流_Golang微服务容错与流控方法
C#如何使用XPathNavigator高效查询XML
如何使用Golang指针与结构体结合_修改结构体内部字段
Win11怎么设置触控板手势_Windows11三指四指操作自定义
C++如何使用std::transform批量处理容器元素?(代码示例)
Win11怎么卸载Photos应用_Win11卸载Photos应用方法【教程】
Windows10电脑怎么设置电源按钮_Win10按电源键关机或休眠
VSC里PHP变量未定义报错怎么解决_错误抑制技巧【解答】
Win11怎么开启移动热点_Windows11共享网络给手机设置教程
如何使用Golang实现文件加密_Golang crypto 文件加密示例
Python文件管理规范_工程实践说明【指导】
Win11讲述人怎么关闭_Win11误触开启语音朗读关闭【快捷键】
Windows 11如何查看系统激活密钥_Windows 11使用CMD或PowerShell命令找回Product Key
Windows 11登录时提示“用户配置文件服务登录失败”怎么办_Windows 11修复损坏的用户配置文件
Python函数参数高级用法_默认值与可变参数解析【教程】
如何在Golang中定义接口_抽象方法和多态实现
Go 语言标准库为何不提供泛型切片的 Contains 方法?
Win11怎么更改电脑密码_Windows 11修改本地账户密码【步骤】
Win11怎么查看已连接wifi密码 Win11查已连wifi密码步骤【教程】
Python集合操作技巧_高效去重解析【教程】
如何在 Go 应用中实现自动错误恢复与进程重启机制
如何使用Golang管理模块版本_Golanggo mod tidy与升级方法
Win11无法识别耳机怎么办_解决Win11插耳机没声音问题【步骤】
如何将文本文件中的竖排字符串转换为横排字符串
Windows服务启动类型恢复方法_错误修改导致的系统服务异常
Win11如何设置鼠标灵敏度_Win11鼠标灵敏度调整教程【攻略】
Win11如何关闭游戏模式 Win11禁用Xbox Game Bar录制【优化】
微信短链接怎么还原php_用浏览器开发者工具抓包获取【方法】
Win10电脑C盘红了怎么清理_Windows10系统盘深度瘦身指南
Win11怎么关闭贴靠布局_Win11禁用窗口最大化时的布局菜单
如何在 Go 中正确反序列化多个同级 XML 元素(而非单个根节点)
Win11怎么退出微软账户_切换Win11为本地账户登录方法【详解】
Win11怎么关闭自动更新 Win11永久关闭系统更新的有效方法【技巧】
如何在同包不同文件中正确引用 Go 结构体
如何快速验证Golang安装是否成功_运行go version和hello world示例
Win11怎么设置多显示器任务栏 Win11扩展任务栏至多屏方便跨屏操作【技巧】
2025-12-26
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。