2012-03-29 6 views
6

Tôi muốn có một số tệp HTML có JavaScript được tải vào điều khiển trình duyệt web trong ứng dụng winforms (v2.0). Trong quá trình thực hiện, tôi sẽ không có quyền truy cập internet, vì vậy các biểu mẫu JavaScript và HTML sẽ được nhúng vào tệp resources.resx của anh ấy.Cách tải HTML/JavaScript từ tài nguyên nhúng vào trình duyệt web winform

1) làm thế nào tôi có thể tải một tài liệu HTML ra khỏi nguồn (tương tự như một file: /// hoạt động, nhưng nó không được nạp từ hệ thống tập tin),

2) sẽ như thế nào tôi khai báo các tập lệnh JavaScript sẽ được tải? I.e.,

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

Cảm ơn!

Trả lời

6

Để tải tài liệu HTML, chỉ cần biên dịch tập tin html của bạn như tài nguyên nhúng, và sau đó:

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

Nếu bạn thực sự cần phải có các file .js bên ngoài, tôi nghĩ rằng có thể bạn sẽ cần phải làm cho họ nhúng tài nguyên. Sau đó, bạn có thể đọc các tài nguyên này thành một chuỗi javascript.

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

(Phỏng theo a reply on this page)

Từ đây, nhìn vào IHTMLScriptElement. Từ những gì tôi hiểu, bạn có thể sử dụng chuỗi javascript này và đặt nó làm trường văn bản của ITHMLScriptElement. Xem this question

Chúc may mắn.

+0

Điều này sẽ không hoạt động. Khi được xây dựng như một tài nguyên nhúng, 'Properties.Resources. ' sẽ trả về các nội dung dưới dạng một mảng byte. – nathanchere

0

Đây là cấu trúc tệp.

enter image description here

tôi đã thành công bằng cách làm này:

Đặt các thuộc tính của file html trong giải pháp của tôi như thế này:

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

Cấu hình thuộc tính đối tượng WebBrowser của tôi như thế này:

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

Bạn nên sử dụng các hàm 'System.IO.Path' như' GetDirectoryName' ở đây thay vì cắt bằng tay bằng 'Chuỗi con'. Cũng lưu ý rằng điều này sẽ dẫn đến 'URL: ///' URL không thân thiện với yêu cầu loại ajax. – emackey