.NET 6 Blazor WASM中的Module对象在升级到.NET 8+后未定义的问题求助
.NET 6 Blazor WASM中的Module对象在升级到.NET 8+后未定义的问题求助
我有一个在.NET 6中正常运行的项目,它会调用以下JS代码:
export function synchronizeFileWithIndexedDb(filename) { return new Promise((res, rej) => { const db = window.indexedDB.open('SqliteStorage', 1); db.onupgradeneeded = () => { db.result.createObjectStore('Files', { keypath: 'id' }); }; db.onsuccess = () => { const req = db.result.transaction('Files', 'readonly').objectStore('Files').get('file'); req.onsuccess = () => { Module.FS_createDataFile('/', filename, req.result, true, true, true); res(); }; }; }); }
在OnInitializedAsync中的后台逻辑是这样的:
if (RuntimeInformation.IsOSPlatform(OSPlatform.Create("browser"))) { // create SQLite database file in browser var module = await _js.InvokeAsync<IJSObjectReference>("import", "./dbstorage.js"); await module.InvokeVoidAsync("synchronizeFileWithIndexedDb", SqliteDbFilename); }
这段代码在.NET 6中运行完美,但可惜.NET 6已经停止支持了。
直接升级到.NET 8后,代码里第11行的Module就变成未定义的了。我在全新的.NET 9项目里也遇到了同样的问题——.NET 6能正常运行,.NET 8及以上版本就会报错。
这是已知问题吗?现在我对升级任何涉及JS互操作的内容都有点怕了😅
有没有解决办法?我根据微软文档尝试把Module改成DotNet,但没用。除非万不得已,我真不想退回到.NET 6来解决这个问题😉
你可以通过升级一个现有的SQLite WASM项目来复现这个问题。
备注:内容来源于stack exchange,提问作者Auri Rahimzadeh
相关产品推荐
相关产品推荐

