如何将 HTML/JavaScript 从嵌入式资源加载到 winform Web 浏览器

Posted

技术标签:

【中文标题】如何将 HTML/JavaScript 从嵌入式资源加载到 winform Web 浏览器【英文标题】:How to load HTML/JavaScript from embedded resource into winform web browser 【发布时间】:2012-04-13 15:07:09 【问题描述】:

我想将一些带有 javascripthtml 文件加载到 winforms (v2.0) 应用程序中的 Web 浏览器控件中。在执行过程中,我将无法访问 Internet,因此 JavaScript 和 HTML 表单将嵌入在 resources.resx 文件中。

1) 如何从资源中加载 HTML 文档(类似于 file:/// 操作,但不是从文件系统加载),

2) 我将如何声明要加载的 JavaScript 脚本?即,

<script src=resource.jquery.min.js??? ... />

谢谢!

【问题讨论】:

【参考方案1】:

要加载 HTML 文档,只需将您的 html 文件编译为嵌入式资源,然后:

WebBrowser browser = new WebBrowser();
browser.DocumentText = Properties.Resources.<your_html_file>;

如果您确实需要外部 .js 文件,我认为您可能需要将它们设为嵌入式资源。然后你可以把这些资源读成一串javascript。

string GetResourceString(string scriptFile) 
 
    Assembly assembly = Assembly.GetExecutingAssembly(); 
    Stream str = assembly.GetManifestResourceStream(scriptFile); 
    StreamReader sr = new StreamReader(str, Encoding.ASCII);
    return sr.ReadToEnd();

(改编自a reply on this page)

从这里,查看 IHTMLScriptElement。据我了解,您也许可以使用此 javascript 字符串并将其设置为 ITHMLScriptElement 的文本字段。见this question

祝你好运。

【讨论】:

这不会按原样工作。当构建为嵌入式资源时,Properties.Resources.&lt;your_html_file&gt; 会将内容作为字节数组返回。【参考方案2】:

这是文件结构。

我这样做是成功的:

在我的解决方案中设置 html 文件的属性,如下所示:

Build Action -> Content
Copy to Output Directory -> Copy always

像这样配置我的 webBrowser 对象属性:

var myAssembly = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
var path = myAssembly.Substring(0, myAssembly.Length - "MyLib.DLL".Length) + "WebViews/prototype/index.html";
webBrowser.Url = new Uri(path);

【讨论】:

你应该在这里使用GetDirectoryName 之类的System.IO.Path 函数,而不是使用Substring 手动切片。另请注意,这将导致file:/// URL 对 ajax 类型的请求不友好。

以上是关于如何将 HTML/JavaScript 从嵌入式资源加载到 winform Web 浏览器的主要内容,如果未能解决你的问题,请参考以下文章

如何从桌面应用程序使用 javascript SDK

《安富莱嵌入式周报》第293期:SEGGER开源其C/C++库源码emRun,丰富EMC电磁兼容资,OTA开源组件,2022 Github全球报告,内存安全指南

如何将数组从 C 传递到嵌入式 python 脚本

如何通过 USB 将数据从 Windows 发送到嵌入式 Linux

如何从嵌入式视频中获取缩略图?

如何开通配资支付接口,目前国内有哪些平台