2012-03-29 7 views
6

Chcę mieć pliki HTML z JavaScript załadowane do formantu przeglądarki w aplikacji WinForms (v2.0). Podczas wykonywania nie będę mieć dostępu do Internetu, więc formularze JavaScript i HTML będą osadzone w pliku resources.resx.Jak załadować HTML/JavaScript z osadzonego zasobu do przeglądarki WinForm

1) Jak mogę załadować dokument HTML z zasobu (analogicznie do file: /// pracy, ale to nie jest ładowany z systemu plików),

2) Jak bym zadeklarować skrypty JavaScript do załadowania? Np.,

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

Dzięki!

Odpowiedz

6

Aby załadować dokument HTML, po prostu skompilować plik HTML jako osadzonego zasobu, a następnie:

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

Jeśli naprawdę trzeba mieć zewnętrzne pliki .js, myślę, że prawdopodobnie będzie konieczne, aby uczynić je osadzone zasoby. Następnie możesz odczytać te zasoby w ciągu znaków javascript.

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

(Adaptacja a reply on this page)

Stąd spojrzeć IHTMLScriptElement. Z tego co rozumiem, możesz być w stanie użyć tego łańcucha javascript i ustawić go jako pole tekstowe ITHMLScriptElement. Zobacz this question

Powodzenia.

+0

To nie zadziała tak jak jest. Po utworzeniu jako zasób osadzony, "Properties.Resources. " zwróci zawartość jako tablicę bajtów. – nathanchere

0

Oto struktura plików.

enter image description here

miałem sukces w ten sposób:

Ustaw właściwości plików html w moim roztwór tak:

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

skonfigurować mojego WebBrowser właściwości obiektu, takie jak to:

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

Należy używać funkcji 'System.IO.Path', takich jak' GetDirectoryName', zamiast ręcznie kroić za pomocą 'Substring'. Zauważ, że spowoduje to również adresy URL 'file: ///', które nie będą przyjazne dla żądań typu ajax. – emackey