相关疑难解决方法(0)

从 Blazor 调用 JavaScript:如何在 DotNetObjectReference 中处理 JavaScript?

我创建了一个 Blazor Web assembly 项目,并在 JavaScript 中添加了一个关键侦听器,该侦听器侦听 DOM 文档上的每个击键。一切都按预期进行,但是当我打开注册了密钥侦听器的 Blazor 页面并稍后再次打开它时,Web 浏览器中会出现以下错误:

没有 ID 为“2”的跟踪对象。也许 DotNetObjectReference 实例已经被释放。(参数“dotNetObjectId”)

显然,对象“dotnethelper”已被释放,但 Javascript 仍在侦听/被调用。

基本上,我实现了Microsoft 文档中的“组件实例 .NET 方法帮助器类” 。

开拓者页面:

注意:IDisposable 被注入到顶部,并且 Dispose 函数被调用。

@code {
    private KeyListenerInvokeHelper _keyListenerInvokeHelper;
    private DotNetObjectReference<KeyListenerInvokeHelper>? objRef;

    protected override async Task OnInitializedAsync()
    {
        objRef = DotNetObjectReference.Create(_keyListenerInvokeHelper);
        await JS.InvokeVoidAsync("initializeKeyListener", objRef);    
    }

    public void Dispose()
    {
        objRef?.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

JavaScript 文件:

window.initializeKeyListener = (dotnetHelper) => {
    document.addEventListener('keydown', logKey);
    function logKey(e) {     
        dotnetHelper.invokeMethod('OnKeyDown', e.key);
        console.log('key down ' + e.key); …
Run Code Online (Sandbox Code Playgroud)

javascript c# blazor-webassembly

5
推荐指数
1
解决办法
4558
查看次数

.WIndow事件监听器持续多久

任何人都知道窗口事件监听器应该持续多长时间?

我最初的想法是,任何附加到文档的内容可能在页面重新加载后丢失,而附加到窗口对象的那些我希望在页面重新加载时持续存在.

但是,测试似乎表明在重新加载页面时会破坏所有事件侦听器,这是正确的吗?

html javascript event-listener

0
推荐指数
1
解决办法
718
查看次数