如何将 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 【问题描述】:我想将一些带有 javascript 的 html 文件加载到 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.<your_html_file>
会将内容作为字节数组返回。【参考方案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 浏览器的主要内容,如果未能解决你的问题,请参考以下文章
《安富莱嵌入式周报》第293期:SEGGER开源其C/C++库源码emRun,丰富EMC电磁兼容资,OTA开源组件,2022 Github全球报告,内存安全指南