我正在尝试使用Blazor创建视频组件。我正在将video.js库用于与视频相关的功能。该代码在仓库https://github.com/VenkateshSrini/BlazorComponents中。 现在,当我第一次运行代码时,出现计数器页面。它具有一个称为播放器的按钮,单击该按钮可启动videplayer.razor。此页面具有视频标签。它显示视频,并且页面上还有一个计时器,该计时器会定期更新浏览器的localStorage中的剩余时间和持续时间。这是通过Javascript桥实现的。然后,当我再次单击计数器页面时,它会平滑过渡而不会出现错误。现在,当我下次重复相同的操作时,我得到一个奇怪的错误。我无法继续进行,我不了解发生了什么。错误如下
blazor.webassembly.js:1爆击:Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer [100] 未处理的异常呈现组件:无法读取null的属性'removeChild' TypeError:无法读取null的属性'removeChild' 在e(http:// localhost:5000 / _framework / blazor.webassembly.js:1:6918) 在Object.e [作为removeLogicalChild](http:// localhost:5000 / _framework / blazor.webassembly.js:1:6890) 在e.applyEdits(http:// localhost:5000 / _framework / blazor.webassembly.js:1:13649) 在e.updateComponent(http:// localhost:5000 / _framework / blazor.webassembly.js:1:12880) 在Object.t.renderBatch(http:// localhost:5000 / _framework / blazor.webassembly.js:1:1704) 在Object.window.Blazor._internal.renderBatch(http:// localhost:5000 / _framework / blazor.webassembly.js:1:34784) 在_mono_wasm_invoke_js_unmarshalled(http:// localhost:5000 / _framework / wasm / dotnet.3.2.0.js:1:172099) 在wasm_invoke_iiiiii(http:// localhost:5000 / _framework / wasm / dotnet.wasm:wasm-function [3160]:0x9b33d) 在icall_trampoline_dispatch(http:// localhost:5000 / _framework / wasm / dotnet.wasm:wasm-function [5777]:0xfe711) 在mono_wasm_interp_to_native_trampoline(http:// localhost:5000 / _framework / wasm / dotnet.wasm:wasm-function [4607]:0xca81d) Microsoft.JSInterop.JSException:无法读取null的属性'removeChild' TypeError:无法读取null的属性'removeChild' 在e(http:// localhost:5000 / _framework / blazor.webassembly.js:1:6918) 在Object.e [作为removeLogicalChild](http:// localhost:5000 / _framework / blazor.webassembly.js:1:6890) 在e.applyEdits(http:// localhost:5000 / _framework / blazor.webassembly.js:1:13649) 在e.updateComponent(http:// localhost:5000 / _framework / blazor.webassembly.js:1:12880) 在Object.t.renderBatch(http:// localhost:5000 / _framework / blazor.webassembly.js:1:1704) 在Object.window.Blazor._internal.renderBatch(http:// localhost:5000 / _framework / blazor.webassembly.js:1:34784) 在_mono_wasm_invoke_js_unmarshalled(http:// localhost:5000 / _framework / wasm / dotnet.3.2.0.js:1:172099) 在wasm_invoke_iiiiii(http:// localhost:5000 / _framework / wasm / dotnet.wasm:wasm-function [3160]:0x9b33d) 在icall_trampoline_dispatch(http:// localhost:5000 / _framework / wasm / dotnet.wasm:wasm-function [5777]:0xfe711) 在mono_wasm_interp_to_native_trampoline(http:// localhost:5000 / _framework / wasm / dotnet.wasm:wasm-function [4607]:0xca81d) 在Microsoft.JSInterop.WebAssembly.WebAssemblyJSRuntime.InvokeUnmarshalled [T0,T1,T2,TResult](System.String标识符,T0 arg0,T1 arg1,T2 arg2)<0x2cd31a0 + 0x00046>在:0中 在Microsoft.JSInterop.WebAssembly.WebAssemblyJSRuntime.InvokeUnmarshalled [T0,T1,TResult](System.String标识符,T0 arg0,T1 arg1)<0x2cd30c0 + 0x00014>在:0中 在Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer.UpdateDisplayAsync(Microsoft.AspNetCore.Components.RenderTree.RenderBatch&批处理)<0x2cd2fc8 + 0x0001e>在:0中 在Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue()<0x2b81948 + 0x000f2>在:0中
我创建了一个视频,使用Github URL中提供的代码来复制步骤。可在https://1drv.ms/u/s!AoG_S7xXx9nDhpMyVM9FqmtFP1ci6w?e=FfYs4y
获得回购步骤视频。答案 0 :(得分:0)
我能够解决此问题。我更改了对InvokeVoidasync的调用,所有参数传递均使用sessionstorage / localstorage处理。我在“ Blazor”页面上使用了计时器。因此,我已经使用IDisposable实现了Dispose方法。但是要执行清除视频控件的清理活动,我再次不得不调用Javascript。在Dispose中我无法做到这一点,因为Dispose是一种同步方法。 GetAwaiter()。GetResult(),因此实现了IAsyncDisposable。然后,我使用了disposeasync和dispose方法。这些事情解决了这个问题。