2009-10-29 11 views
8

Tôi làm cách nào để sử dụng trình duyệt làm giao diện người dùng cho ứng dụng dành cho máy tính để bàn? Những cách tôi đã đưa ra cho đến nay là ...Sử dụng trình duyệt cho giao diện người dùng trên máy tính để bàn

  1. Sử dụng tất cả HTML/Javascript. Sự cố: Không thể truy cập hệ thống tệp hoặc bất kỳ thứ gì khác.
  2. Chạy máy chủ web cục bộ trong khi ứng dụng đang được sử dụng. Vấn đề: Làm thế nào để giết nó khi người dùng được thực hiện? Người dùng của tôi không đủ kỹ thuật để Ctrl + C.
  3. Nhúng thành phần trình duyệt trong GUI thông thường. Sự cố: Các thành phần trình duyệt được nhúng có xu hướng không ổn định. Sự hỗ trợ cho Javascript/CSS không bao giờ tốt bằng trình duyệt thực.
  4. ...?

Giải pháp lý tưởng sẽ hoạt động với mọi công nghệ. Tôi biết có các tùy chọn như viết các phần mở rộng của Firefox, nhưng tôi muốn có sự tự do hoàn toàn trong công nghệ phụ trợ và tính độc lập của trình duyệt.

+1

Thú vị bạn nên hỏi: Tôi đang tạo một plugin NPAPI (Firefox, Chrome) để khám phá "ứng dụng dành cho máy tính để bàn" có sẵn thông qua HTTP. Nó được dựa trên Avahi mdns Service Discovery. – jldupont

+1

Tôi cũng đã mở một số "lỗi" trên Chromium để giúp hướng tới mục tiêu này. – jldupont

Trả lời

2

Trong Windows, bạn có thể nhúng điều khiển ActiveX ActiveX, sử dụng công cụ hiển thị giống như IE. (Đó là dấu cộng và dấu trừ) Bạn có thể đặt thuộc tính ScriptObject trong mã máy chủ của mình và truy cập vào Javascript dưới dạng window.external để làm những việc mà Javascript không thể thực hiện được.

Nếu bạn chạy máy chủ web cục bộ, bạn có thể có liên kết thoát trong ứng dụng giết chết websever.

+0

Điều tôi đang gặp khó khăn trong việc tìm ra cách viết liên kết giết. Tôi đã nghĩ ra một giải pháp, nhưng nó rất khó. Các máy chủ mà tôi đã thử tất cả đều là Python, nhưng bất kỳ loại ví dụ cụ thể nào cũng sẽ rất tuyệt. –

+0

Và tất nhiên có vấn đề là người dùng không thể nhấp vào liên kết giết. –

+0

Nếu bạn lưu trữ một điều khiển WebBrowser, bạn có thể giết máy chủ khi ứng dụng máy chủ thoát.Nếu không, bạn có thể giết máy chủ một thời gian sau yêu cầu cuối cùng và gửi nhịp đập trái tim trong các trang của bạn trong trường hợp người dùng rời khỏi nó một mình trong một thời gian. Hoặc, bạn chỉ có thể để nó chạy. – SLaks

1

Bạn không đề cập đến hệ điều hành mà bạn sẽ cần nhắm mục tiêu. Nhưng bạn có thể tạo một máy chủ web được lập trình thống kê, sau đó bỏ qua trình duyệt mặc định. Chờ cho đến khi trình duyệt bị người dùng chấm dứt và sau đó tắt máy chủ web.

Vì vậy, ví dụ trên cửa sổ bạn có thể sử dụng CreateProcess() để sinh ra quá trình sau đó MsgWaitForMultipleObjects() để chờ cho đến khi nó được thực hiện xong.

+0

Tính độc lập của hệ điều hành cũng sẽ tuyệt vời, nhưng Windows là thứ tôi đang làm. Điều này có vẻ như nó có thể hoạt động. Người dùng vẫn có thể để trình duyệt mở và sử dụng trình duyệt để duyệt các trang web khác, nhưng ít nhất tôi biết * cuối cùng * nó sẽ bị đóng. Tuy nhiên, có thể có vấn đề nếu trình duyệt quyết định mở ứng dụng trong tab mới thay vì trình duyệt mới. Tôi nghĩ Firefox thực hiện điều này ngay cả khi được gọi từ dòng lệnh. –

+2

Nếu bạn đợi trình duyệt đóng lại, bạn sẽ không bao giờ ngừng chờ. Hãy nhớ rằng tất cả các trình duyệt hiện đại đều hỗ trợ các tab, do đó nhiều người, bao gồm cả tôi, chạy trình duyệt 24/7. – SLaks

+1

Ngoài ra, nếu trình duyệt đang chạy, bạn thậm chí sẽ không nhận được một quy trình mới để chờ. – SLaks

8

Xin lưu ý rằng nếu bạn chọn chạy một máy chủ web cục bộ, bạn đang tạo ra một nguy cơ bảo mật.

Bất kỳ trang web nào chạy trên cùng một máy biết về ứng dụng của bạn có thể gửi yêu cầu tới máy chủ của bạn bằng Javascript và bạn không có cách nào đơn giản và đáng tin cậy để biết yêu cầu đến từ đâu. (Không tin tưởng tiêu đề referer)

Google Desktop, sử dụng phương pháp tương tự, đã có một số lỗ hổng trong thế giới thực cho phép bất kỳ trang web nào đọc bất kỳ tệp nào trên đĩa.

Có một số cách để bảo vệ chống lại điều này; Tôi khuyên bạn nên yêu cầu mỗi yêu cầu để có một khóa auth được tạo ngẫu nhiên trên mỗi máy (và hết hạn tại một số điểm), mà bạn có thể đặt trong nguồn cho các trang thực tế. XHR bảo vệ sẽ ngăn chặn các trang web độc hại từ đọc các phím auth, làm cho họ bất lực.

+1

Máy chủ cục bộ có thể được đặt để chỉ chấp nhận các yêu cầu từ cùng một máy mà máy đang chạy không? –

+0

Có; Tôi có nghĩa là Javascript trên cùng một khách hàng có thể gửi yêu cầu như vậy. – SLaks

+1

Thú vị .... –

1

Ứng dụng HTML (viết tắt là HTA) đã diễn ra một lúc. Bạn có thể đọc tất cả về chúng here. Về cơ bản chúng là HTML và Javascript với một số tùy chọn bổ sung để tạo một cửa sổ và có quyền truy cập vào hệ thống tệp cục bộ. Họ dường như là chính xác những gì bạn muốn. Đây là công nghệ của Microsoft, vì vậy điều này sẽ chỉ làm việc với IE trên các hệ thống Windows. Tôi đã sử dụng thành công này làm front-end cho đĩa CD-ROM được sử dụng để phân phối phần mềm cho sinh viên năm thứ nhất

Một tùy chọn khác là sử dụng Adobe Air. Tôi không phải tất cả những người quen thuộc với công nghệ này, nhưng dường như nó cung cấp một khuôn khổ để triển khai các trang web như các ứng dụng máy tính để bàn.Tôi không thể đăng liên kết thứ hai với tư cách khách, nhưng chỉ cần google và bạn sẽ sớm tìm thấy nó.

+0

Thực ra, đây chính là điều tôi không muốn, bởi vì "Tôi muốn có sự tự do hoàn toàn trong công nghệ phụ trợ và độc lập trình duyệt." –

4

Nếu bạn đang tìm kiếm Máy chủ Web trăn có liên kết Giết, bạn luôn có thể kiểm tra CherryPy.

import webbrowser 
import cherrypy 
import threading 

class MyApp: 
    """ Sample request handler class. """ 

    @cherrypy.expose 
    def index(self): 
     return """<html><head><title>An example application</title></head> 
<body> 
<h1>This is my sample application</h1> 
Put the content here... 
<hr> 
<a href="/exit">Quit</a> 
</body></html>""" 

    @cherrypy.expose 
    def exit(self): 
     raise SystemExit(0) 


class MyBGThread(threading.Thread): 
    def __init__(self): 
     threading.Thread.__init__(self) 
     self.start() 

    def run(self): 
     cherrypy.tree.mount(MyApp()) 
     cherrypy.quickstart() 

myThread = MyBGThread() 
webbrowser.open("http://127.0.0.1:8080") 

Mã này được dựa trên mẫu từ SingleClickAndRun trên website CherryPy: http://tools.cherrypy.org/wiki/SingleClickAndRun

Lưu ý hơn trong một WebApp bình thường bạn có thể sẽ sử dụng một động cơ templating và các mẫu tải từ các phương pháp như chính.

Điều gì đó sẽ tốt đẹp là đặt một điều khiển trình duyệt trong cửa sổ gui và đóng máy chủ khi ứng dụng thoát.

Vì lý do bảo mật, bạn có thể thêm chương trình xác thực. Có một vài được hỗ trợ bởi cherrypy, nhưng bạn có thể có thể thực hiện của riêng bạn quá, sử dụng các mô-đun công cụ.

+0

Đây là loại nội dung tôi đang tìm kiếm. Cảm ơn. –

4

Tôi đang tìm cách làm điều tương tự (ứng dụng dành cho máy tính để bàn sử dụng trình duyệt HTML5/CSS3 cập nhật làm GUI của ứng dụng dành cho máy tính), chỉ với Ruby (nhiều lý do tại sao tôi quyết định làm việc với Ruby). Số lượng thư viện nền tảng tuyệt vời mà mọi người đã đưa ra. Tuy nhiên, ít hoặc không có ai, đã thực hiện bất kỳ công việc nào để cố gắng làm cho trình duyệt web trở thành giao diện người dùng ứng dụng dành cho máy tính để bàn. Vấn đề nền tảng chéo ... tôi cũng sẽ không nói giải quyết, nhưng tôi sẽ nói một số bước đi đúng hướng.

Với tôi điều này sẽ hoàn hảo với tiêu chuẩn HTML5/CSS3 mới sắp ra mắt. Tôi biết nó có thể được thực hiện với một máy chủ web chạy cục bộ.

Một cách khác có thể giống như cách các chàng trai từ “280 North” đang làm những gì họ làm. Họ đã phát triển Objective-J (một phần mở rộng của JavaScript thông thường bắt chước cách Objective-C mở rộng thường xuyên C) và Cappuccino (tương đương Objective-J của khung Cocoa Objective-C hoạt động trên MAC). Họ cũng phát triển “Atlas”, phiên bản 280 North của “Trình tạo giao diện” của Apple từ Xcode, cho các framework Objective-J và Cappuccino của họ để xây dựng các ứng dụng Internet. Atlas thực sự là một ứng dụng web Cappuccino chạy trên máy tính để bàn của bạn dưới dạng ứng dụng dành cho máy tính để bàn. Trong trường hợp này, họ sử dụng Narwhal ... một nền tảng chéo, mục đích chung, nền tảng JavaScript để phát triển các ứng dụng JS bên ngoài trình duyệt (về cơ bản là một máy chủ web chuyên dụng).

Nếu bất kỳ ai có thể đưa ra ý tưởng làm cho "Trình duyệt, kết nối trực tiếp với ứng dụng dành cho máy tính" hoạt động mà không cần máy chủ web cùng tồn tại và vẫn thao túng FS nội bộ, tôi sẽ rất quan tâm … Hmmm… Bây giờ tôi nghĩ về nó, tôi tự hỏi liệu dự án Google Chrome mới “Native Client” có thể được sử dụng để làm điều đó không. NaCL giống như Active X ngoại trừ bạn không bị giới hạn ở nền tảng Windows (nhưng sẽ bị giới hạn trong trình duyệt Google Chrome, ít nhất là bây giờ). Chỉ có thêm bảo mật thông qua Sandboxing, nhưng bạn có thể thao tác FS nội bộ ... Tôi càng nghĩ về nó, tôi càng bắt đầu nghi ngờ rằng nó có thể được thực hiện.

Mọi suy nghĩ?