2012-04-20 119 views
1

我正在使用WinForms浏览器控件来显示一些HTML文件中的内容,这些内容是作为资源嵌入的,它可以正常工作。引用来自嵌入式资源的嵌入式资源

我想现在在我的应用程序中嵌入一些脚本和样式表,但无法弄清楚如何尽可能地从html页面引用其他嵌入式文件。

我现在的解决方案是加载资源并在显示它之前将它们添加到浏览器控件的文档中,但是如果我想使用类似JQuery的东西,这可能有点麻烦。

回答

1

如果脚本和样式表与HTML文件位于同一目录树中,则可以使用相对路径(例如<script src="../scripts/myFoo.js" />)。或者我错过了什么?

+0

myFoo.js将被嵌入可执行文件就像HTML文件的资源,所以没有这样的东西作为一个相对路径。 – 2012-04-20 20:34:33

+0

我看到了 - 您希望它们作为应用程序中的嵌入式资源。不知何故,我错过了。在这种情况下,我认为你现在的解决方案可能是合理的,即使它有点混乱。 – 2012-04-20 20:36:56

+0

我正在考虑接受这个答案,因为它让我意识到我努力想要聪明。我最终做的是压缩所有html资源,并在首次运行时将其提取到用户的AppData目录中,而不用担心将脚本或CSS注入到WebBrowser控件的文档中。 – 2012-04-30 22:11:01

0

嵌入的文件,然后在渲染前提取每一个到临时文件夹:

string ret = ResourceUtility.GetTempFileFromEmbeddedResource(Assembly.GetExecutingAssembly(), 
    "outlook.addin.a.html", "a.html"); 

var bsjs = ResourceUtility.GetTempFileFromEmbeddedResource(Assembly.GetExecutingAssembly(), 
    "outlook.addin.bootstrap.js.bootstrap.min.js", "bootstrap.min.js"); 

public static string GetTempFileFromEmbeddedResource(Assembly assembly, string resourceName, string fileName) 
{ 
    string output; 
    using (Stream s = ResourceUtility.GetEmbeddedResourceStream(assembly, resourceName)) 
    { 
     StreamReader sr = new StreamReader(s); 
     output = sr.ReadToEnd(); 
    } 

    return CreateLocalTempFile(output, fileName); 
}