2012-03-29 16 views
6

Quiero tener algunos archivos HTML con JavaScript cargados en el control del navegador web en una aplicación winforms (v2.0). Durante la ejecución, no tendré acceso a Internet, por lo que los formularios JavaScript y HTML se incorporarán en el archivo resources.resx.Cómo cargar HTML/JavaScript desde el recurso incrustado en el navegador web winform

1) ¿Cómo puedo cargar un documento HTML a cabo del recurso (análogo a un file: /// operación, pero no se carga desde el sistema de archivos),

2) ¿Cómo me declarar los scripts de JavaScript para ser cargados? Es decir,

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

Gracias!

Respuesta

6

para cargar el documento HTML, simplemente compilar su archivo html como recurso incrustado, y luego:

WebBrowser browser = new WebBrowser(); 
browser.DocumentText = Properties.Resources.<your_html_file>; 

Si realmente necesita tener archivos .js externos, creo que es probable que necesite para que sean incorporados recursos. Luego puede leer estos recursos en una cadena de javascript.

string GetResourceString(string scriptFile) 
{ 
    Assembly assembly = Assembly.GetExecutingAssembly(); 
    Stream str = assembly.GetManifestResourceStream(scriptFile); 
    StreamReader sr = new StreamReader(str, Encoding.ASCII)); 
    return sr.ReadToEnd(); 
} 

(Adaptado de a reply on this page)

Desde aquí, mira en IHTMLScriptElement. Por lo que entiendo, puede usar esta cadena de javascript y configurarla como el campo de texto de ITHMLScriptElement. Ver this question

Buena suerte.

+0

Esto no funcionará como está. Cuando se crea como un recurso incrustado, 'Properties.Resources. ' devolverá el contenido como una matriz de bytes. – nathanchere

0

Aquí está la estructura del archivo.

enter image description here

que tuvieron éxito al hacer esto:

Establecer las propiedades de los archivos html en mi solución como esta:

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

configurar mi WebBrowser propiedades del objeto como este:

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

Debería usar las funciones 'System.IO.Path' como' GetDirectoryName' aquí en lugar de cortar manualmente con 'Substring'. También tenga en cuenta que esto dará como resultado 'file: ///' URLs que no serán amigables con las solicitudes tipo ajax. – emackey

Cuestiones relacionadas