【问题标题】:How to load HTML/JavaScript from embedded resource into winform web browser如何将 HTML/JavaScript 从嵌入式资源加载到 winform Web 浏览器
【发布时间】: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??? ... />

谢谢!

【问题讨论】:

    标签: c# javascript html webbrowser-control


    【解决方案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 类型的请求不友好。
    猜你喜欢
    • 2016-03-03
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多