winforms 导航到字符串时使用webview2中的indexedDB和本地存储

xzv2uavs  于 2023-03-19  发布在  IndexedDB
关注(0)|答案(1)|浏览(360)

我是webview2的新手,目前正在制作一个单文件winforms应用程序,到目前为止我的理解是,我必须使用Stream stream = assembly.GetManifestResourceStream();来读取嵌入式资源。
net版本是6.0,除了webview2之外,我没有其他依赖项。我的webfiles在我的解决方案中的一个文件夹中,它们是嵌入式资源。
我的问题是,当使用该方法时,我在使用indexedDB时会得到错误'IDBFactory': access to the Indexed Database API is denied in this context.。我在使用localStorage Failed to read the 'localStorage' property from 'Window': Access is denied for this document.时也会得到这个错误。
我在我的环境中设置了以下标志:我不知道他们是否真的得到应用,但我不明白为什么他们不会。
我的UDF在我的临时文件夹中,它可以写入。

是否有某种方法可以实际使用indexedDb,或者我应该用其他方法?

  • (我的第一个stackoverflow职位,所以请告诉我,如果我忘了提到的东西,或者如果有什么我应该做得更好)*
qnakjoqk

qnakjoqk1#

我解决这个问题的方法是按照这个职位的指示:https://stackoverflow.com/a/72105217/3943588,这是我找到感谢大卫Risney。
然而,我不得不用一种迂回的方式来做这件事。
这是我最终使用的代码:

public async Task InitializeCoreWebView2Async(WebView2 webView, 
        webView.CoreWebView2.AddWebResourceRequestedFilter(filter,
                                                   CoreWebView2WebResourceContext.All);
        webView.CoreWebView2.WebResourceRequested += CoreWebView2_WebResourceRequested;
    }

    private void CoreWebView2_WebResourceRequested(object sender, CoreWebView2WebResourceRequestedEventArgs e)
    {
        var assembly = Assembly.GetExecutingAssembly();
        string resourcePath = assembly.GetManifestResourceNames().Where(r => r.StartsWith("{solution.namespace}") && r.EndsWith("index.html")).Single();
        using Stream stream = assembly.GetManifestResourceStream(resourcePath);
        using StreamReader reader = new StreamReader(stream);

        String streamAsText = string.Concat(reader.ReadToEnd()).Replace(Environment.NewLine, "");

        CoreWebView2WebResourceResponse response = webView.CoreWebView2.Environment.CreateWebResourceResponse(
            new MemoryStream(Encoding.UTF8.GetBytes(streamAsText)),
            200, "OK", "Content-Type: text/html; charset=utf-8");
        e.Response = response;
    }

创建流以读取资源,然后将其更改为字符串,然后再更改回来,这是因为它使用流信息的方式。
流信息有很多换行符和行空间,所以它没有发送整个流,所以我读取流,然后连接它,并删除所有换行符,这样我就可以将其更改为流并发送。
如果你有任何问题,我会尽快回复。

相关问题