You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor中如何使用TinyMCE的OnKeyDown事件?求实现示例

Blazor中TinyMCE绑定OnKeyDown事件的实现示例

因为Blazor版TinyMCE的配置依赖C#字典,没法直接像JS版那样写setup回调逻辑,得靠JS互操作衔接,下面是完整的可运行实现方案:

1. Razor组件代码

@page "/tinymce-key-demo"
@inject IJSRuntime JSRuntime

<TinyMCE.Blazor.TinyEditor
    Id="demo-editor"
    Config="@EditorSettings"
/>

@code {
    private Dictionary<string, object> EditorSettings { get; set; }

    protected override void OnInitialized()
    {
        EditorSettings = new Dictionary<string, object>
        {
            ["height"] = 400,
            // 将setup回调以字符串形式传入配置字典
            ["setup"] = @"function(editor) {
                editor.on('keydown', function(e) {
                    // 调用全局JS中转函数,传递事件参数
                    window.sendKeydownToBlazor(e.keyCode, e.key, e.shiftKey, e.ctrlKey);
                });
            }"
        };

        // 注册Blazor组件引用给JS,让JS能调用C#方法
        _ = JSRuntime.InvokeVoidAsync("registerBlazorKeydownHandler", DotNetObjectReference.Create(this));
    }

    // 标记为允许JS调用的方法
    [JSInvokable]
    public void ProcessKeydown(int keyCode, string key, bool shiftPressed, bool ctrlPressed)
    {
        // 这里编写你的按键处理逻辑,示例如下:
        Console.WriteLine($"按下按键: {key} (编码: {keyCode}), Shift: {shiftPressed}, Ctrl: {ctrlPressed}");
        
        // 比如拦截Ctrl+S触发保存操作
        if (ctrlPressed && key.Equals("s", StringComparison.OrdinalIgnoreCase))
        {
            // 调用你的业务方法,比如SaveEditorContent();
        }
    }
}

2. 全局JS中转代码

在项目的wwwroot/index.html(WebAssembly项目)或Pages/_Host.cshtml(Server项目)中添加以下JS代码,用于衔接TinyMCE的JS事件和Blazor的C#方法:

<script>
    let blazorComponentRef;

    function registerBlazorKeydownHandler(component) {
        blazorComponentRef = component;
    }

    function sendKeydownToBlazor(keyCode, key, shiftKey, ctrlKey) {
        blazorComponentRef.invokeMethodAsync('ProcessKeydown', keyCode, key, shiftKey, ctrlKey);
    }
</script>

核心逻辑说明

  • Blazor版TinyMCE的Config字典仅支持简单类型,因此将JS的setup回调以字符串形式传入
  • 通过DotNetObjectReference把Blazor组件实例传递给JS,实现JS对C#方法的调用
  • 可根据需求调整事件参数,比如增加altKey等属性,只需在JS中传递对应参数即可

内容的提问来源于stack exchange,提问作者MassiveMelon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 22:55:23