繁体   English   中英

有没有办法在 Windows WebView2 组件中进行自定义资源加载? 例如,像自定义 URL 方案?

[英]Is there a way to do custom resource loading in the Windows WebView2 component? Like a custom URL scheme, for instance?

I'm looking into using the WebView2 component for rendering some UI things on Windows, and I have a question about resource loading: for loading "normal" resources (ie HTML, CSS, images, JavaScript, whatever), the component mostly takes care处理这些资源本身的加载。 但我想知道是否有一种方法可以连接到该加载过程并使用 WebView2 自己控制它?

例如:假设您要加载在 WebView2 的本机端程序生成的图像,即它不在文件或服务器上。 你会怎么做? 另一个示例是,如果您将所有资源存储在 zip 文件或 SQLite 数据库或类似的数据库中,并且您希望 WebView2 组件直接从中加载资源(您自己编写“桥”代码),您将如何去做?

我问的原因是因为在 macOS 上,WKWebView 通过允许您创建自定义 url 方案并将处理程序连接到它们来提供此功能。 正是我想要的,它允许您在 HTML 中执行以下操作:

<script type="text/javascript" src="my-scheme://test.js"/>

在 Objective-C 方面,你可以做这样的事情(省略了将my-scheme连接到这个处理程序的样板,这是处理响应的代码的核心):

        const char* data = "function testFunction() { return 18; }";

        [task didReceiveResponse: [[NSURLResponse alloc]
                                   initWithURL: task.request.URL
                                   MIMEType: @"text/javascript"
                                   expectedContentLength: strlen(data)
                                   textEncodingName: @"ASCII"]];
        
        [task didReceiveData: [NSData
                               dataWithBytes: data
                               length:strlen(data)]];
        
        [task didFinish];

即通过注册自定义 url 方案处理程序,我可以将我的 C 字符串作为 JavaScript 文件发送到那里。 它不一定是硬编码的 C 字符串,显然,正如我提到的,对我来说最相关的用途是提供程序生成的资源,以及加载不一定存储为文件的东西(或在 web服务器)。 您将如何使用 WebView2 执行此操作?

我将任何类型的文件从本机代码发送到浏览器的一种方法是将文件转换为 Base64,然后将其发送到浏览器。 在 WebView2 的情况下, 您可以使用 ExecuteScriptAsync 收到 Base64 字符串后,您可以使用 javascript 代码(您之前已注入)将其转换为 blob/文件,然后您可以将其添加到您想要的 DOM 的任何部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM