如何从嵌入资源中加载HTML/JavaScript到Winform Web浏览器?

7

我希望在一个winforms(v2.0)应用程序中,将一些带有JavaScript的HTML文件加载到Web浏览器控件中。在执行过程中,我没有互联网访问权限,因此JavaScript和HTML表单将被嵌入到resources.resx文件中。

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

2)如何声明要加载的JavaScript脚本?例如:

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

谢谢!

2个回答

7

要加载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();
}

(改编自此页面上的回复)
从这里开始,看看IHTMLScriptElement。据我所知,您可以将此javascript字符串设置为ITHMLScriptElement的文本字段。请参见此问题
祝好运。

这样是行不通的。当作为嵌入式资源构建时,Properties.Resources.<your_html_file>将返回内容作为字节数组。 - nathanchere

0

这是文件结构。

enter image description here

我通过以下方式取得成功:
设置我的解决方案中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);

1
在这里,您应该使用 System.IO.Path 函数,例如 GetDirectoryName,而不是手动使用 Substring 进行切片。另外请注意,这将导致 file:/// URL,这对于 ajax 类型的请求来说并不友好。 - emackey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接