2012-03-29 70 views
6

我想有一些JavaScript的HTML文件加载到一个WinForms(V2.0)应用程序的Web浏览器控件。在执行期间,我将无法访问Internet,因此JavaScript和HTML表单将嵌入到resources.resx文件中。如何从嵌入的资源加载HTML/JavaScript插入WinForm的Web浏览器

1)如何可以加载HTML文档出资源(类似于文件的:///的操作,但它没有被从文件系统加载),

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

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

谢谢!

回答

6

要加载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

好运。

+0

这将无法正常工作的。当作为嵌入资源,'Properties.Resources建'将返回的内容作为一个字节数组。 – nathanchere 2015-08-18 09:04:25

0

这里的文件结构。

enter image description here

我做这个已经成功:

设置HTML文件的属性在我的解决方案是这样的:

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

配置我的web浏览器对象的属性是这样的:

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 2016-02-02 16:41:28