2012-03-29 5 views
6

Desidero che alcuni file HTML con JavaScript vengano caricati nel controllo del browser Web in un'applicazione winforms (v2.0). Durante l'esecuzione, non avrò accesso a Internet, quindi i moduli JavaScript e HTML saranno incorporati nel file resources.resx.Come caricare HTML/JavaScript dalla risorsa incorporata nel browser Winform

1) come faccio a caricare un documento HTML fuori della risorsa (analogo a un file: /// operazione, ma non viene caricata dal file system),

2) come faccio dichiarare gli script JavaScript da caricare? I.e.,

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

Grazie!

risposta

6

Per caricare il documento HTML, basta compilare il file HTML come risorsa incorporata, e quindi:

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

Se davvero bisogno di avere i file .js esterni, credo che si avrà probabilmente bisogno di farli incorporati risorse. Quindi puoi leggere queste risorse in una stringa di javascript.

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

(Adattato da a reply on this page)

Da qui, guardare in IHTMLScriptElement. Da quanto ho capito, potresti essere in grado di utilizzare questa stringa javascript e impostarla come campo di testo ITHMLScriptElement. Vedi this question

Buona fortuna.

+0

Questo non funzionerà così com'è. Quando costruito come risorsa incorporata, 'Properties.Resources. ' restituirà il contenuto come una matrice di byte. – nathanchere

0

Ecco la struttura del file.

enter image description here

ho avuto successo in questo modo:

Impostare le proprietà dei file html nella mia soluzione come questa:

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

configurare il mio browser web le proprietà degli oggetti come questo:

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

Dovresti utilizzare le funzioni 'System.IO.Path' come' GetDirectoryName' qui invece di affettare manualmente con 'Substring'. Nota anche che ciò comporterà 'file: ///' URL che non saranno amichevoli alle richieste di tipo jax. – emackey