2011-12-04 31 views
6

Tôi muốn tạo ứng dụng cục bộ có giao diện người dùng dựa trên trình duyệt thay vì giao diện độc lập dựa trên MFC/Qt/v.v. Nếu tôi không muốn chạy máy chủ web trên máy cục bộ, làm cách nào tôi có thể triển khai các phần động của ứng dụng của tôi? Trình duyệt có thể được trỏ đến các tập lệnh cục bộ, tệp thực thi hoặc thư viện trên máy không? Tôi có thể sử dụng cơ sở dữ liệu cục bộ trực tiếp> Có những cạm bẫy nào với phương pháp này không?Có thể viết một ứng dụng web cục bộ không cần máy chủ không?

+0

Quy trình đã đưa bạn đến quyết định này là gì? – u07ch

+0

HTTP + CSS rất tuyệt vời để tạo GUI động và di động. Nhưng một máy chủ là một sự bất tiện của một ứng dụng web địa phương có thể có nghĩa là cài đặt cần độ cao, vv Vì vậy, đó là lý do tại sao - muốn tránh máy chủ nếu có thể. – paperjam

+2

@paperjam: Máy chủ không thực sự cần quyền root để cài đặt.Chạy trên cổng 80 cần nó nhưng bạn có thể chạy máy chủ của bạn trên các cổng khác. Chúng tôi đã thực hiện việc này để triển khai phiên bản dành cho máy tính để bàn của ứng dụng web của chúng tôi. Về cơ bản một máy chủ perl tối thiểu (ứng dụng của chúng tôi là trong perl) chạy trên một cổng ngẫu nhiên và một webkit thực thi tùy chỉnh kết nối với máy chủ. Chúng tôi đã chọn webkit để xây dựng trình duyệt tùy chỉnh của chúng tôi vì nó hỗ trợ lớn 3: Windows, Mac và Linux. – slebetman

Trả lời

4

Có, nhưng có giới hạn. Hạn chế chính là bạn không thể thực hiện bất kỳ công cụ CGI nào vì trình duyệt sẽ mở và hiển thị mã nguồn kịch bản của bạn thay vì thực thi chúng. Điều này có một số ngụ ý:

  1. Bạn không thể kết nối với cơ sở dữ liệu. Điều này làm cho nó khó khăn để làm công cụ phổ biến như lưu trữ các tiểu bang và dữ liệu người dùng.
  2. Bạn không thể đặt Loại nội dung. Điều này có nghĩa là bạn không thể thực hiện bất kỳ công cụ XML ưa thích nào như phục vụ các tệp SVG hoặc sử dụng XML trong XMLHttpRequest.
  3. Bạn không thể tạo hình ảnh động (bằng ImageMagick hoặc GD). Mặc dù với HTML5, bạn có thể làm điều đó với canvas.
  4. Bạn không thể đọc hoặc ghi vào hệ thống tệp. Điều này lại hạn chế khả năng lưu dữ liệu của bạn. Nhưng nó có thể được thực hiện với quyền người dùng chính xác (thêm về điều này dưới đây).

Nhưng có giải pháp thay thế. HTML5 cho phép bạn lưu trữ dữ liệu trong bộ nhớ cục bộ nhưng rõ ràng điều này sẽ không hoạt động trong các trình duyệt cũ hơn. Bạn có thể lưu trữ dữ liệu trong cookie thay vào đó nhưng có giới hạn về kích thước. Cuối cùng bạn thực sự có thể lưu vào tập tin. Bạn phải hướng dẫn người dùng của mình sửa đổi tùy chọn trình duyệt của họ để cho phép tập lệnh của bạn thực hiện việc này nhưng có thể thực hiện được. Một ví dụ về điều này là TiddlyWiki. Đây là một wiki cá nhân khép kín trong một tệp HTML duy nhất. Mỗi lần bạn lưu nội dung mới, trang sửa đổi và lưu chính nó. Bạn có thể muốn xem cách họ làm điều đó cho cảm hứng.

1

Nếu bạn muốn tuyến đường HTML thuần túy HTML5 sẽ cho phép bạn tạo cơ sở dữ liệu cục bộ trong trình duyệt; với đủ kinh nghiệm mã hóa javascript, bạn có thể viết toàn bộ trang web trong đó làm cho mọi thứ trong JS thay vì tải các tệp HTML. Tải một tệp và hiển thị mọi thứ sau đó bằng cách sử dụng công cụ javascript.

Nếu ứng dụng có ý nghĩa của nó và bạn có thể viết nó theo cách đó mà không phát điên chào bạn.

Nếu bạn đang ở trên cửa sổ, bạn có thể ăn gian và sử dụng Active x/vbscript - nhưng nếu bạn đang làm điều đó tại sao không viết một lần nhấp ứng dụng .net. Nếu không có một số thành phần ứng dụng máy chủ web, trình duyệt sẽ không thể nói chuyện với một cơ sở dữ liệu truyền thống.

2

Tôi tin rằng các tùy chọn duy nhất của bạn về mặt tập lệnh sẽ là Javascript trong trường hợp này. (Hoặc Java Applet hoặc Flash, nhưng tôi không nghĩ bạn muốn điều đó)

Tôi khuyên bạn nên xem xét webkit nhúng của QT. Bạn có thể sử dụng nó để nhúng trình duyệt trong một ứng dụng QT đơn giản và sử dụng nó cho hầu hết giao diện người dùng của bạn, sau đó bạn có sức mạnh của C++/QT cho chương trình phụ trợ của bạn. QT có thể liên kết mã C++ trực tiếp với Javascript.

Xem QWebFrame class, đặc biệt là phương pháp addToJavaScriptWindowObjectQt WebKit Bridge.

Các vấn đề liên quan