2016-01-23 36 views
7

Tôi có tiện ích mở rộng web của google chrome cần giao tiếp với ứng dụng máy tính để bàn Qt - nhưng làm cách nào?Cách kết nối tiện ích mở rộng web chrome với máy chủ cục bộ?

  • Có tin nhắn gốc của Chrome, nhưng vì tôi muốn hỗ trợ nhiều trình duyệt/HĐH, đây sẽ là quá nhiều nỗ lực vì nó chỉ dành cho Chrome.

  • Sau đó, có this bài đăng đề xuất thiết lập máy chủ cục bộ. Đây là những gì tôi đã làm, xem dưới đây.

tôi đã thiết lập một máy chủ với Qt với QTcpServer sử dụng QTcpSocket 's trên 127.0.0.1 (localhost). Tuy nhiên, tiện ích mở rộng web không thể nghe ổ cắm, chỉ các ứng dụng chrome can. Có 2 giải pháp khả thi trong đầu tôi:

  • Như một giải pháp, tôi có thể viết một ứng dụng chrome nhỏ. Ứng dụng Qt sẽ nói chuyện với tiện ích chrome thông qua ứng dụng chrome (ổ cắm hỗ trợ ứng dụng chrome). Nhưng tôi nghĩ phương pháp này vụng về và không hoàn toàn thanh lịch.

  • Mặt khác, tôi đã đọc khoảng socket.io. Ý tưởng là: Cuộc đàm phán mở rộng chrome qua http requests với các cuộc trò chuyện socket.io và socket.io qua ổ cắm bằng ứng dụng dành cho máy tính để bàn của tôi. Đây có phải là giải pháp khả thi không?

Tôi cũng đã thử kết nối trực tiếp với máy chủ cục bộ bằng mã sau. Trong ứng dụng máy chủ Qt của tôi, tôi thấy rằng có một kết nối mới. Nhưng tôi không thể có được một phản ứng nào cả (hoặc mã Qt của tôi là sai hoặc đó là vì phần mở rộng không thể nghe socket?)

var xhr = new XMLHttpRequest(); 
xhr.open("GET", "http://localhost:12345", true); 
xhr.onreadystatechange = function() { 
if (xhr.readyState == 4) { 
    alert('This is the response from the server: '+ xhr.responseText); 
} 
+0

Nếu bạn muốn hỗ trợ nhiều trình duyệt/HĐH, tại sao bạn vẫn sử dụng tiện ích mở rộng google chrome? Nó chỉ dành cho chrome. –

+0

vì đó là cách dễ nhất để bắt đầu và lõi (js, html, css) phải khá phổ biến ... – user2366975

Trả lời

2

như bạn đã biết phần mở rộng có thể không tạo kết nối trực tiếp:

Google Chrome Socket API in extensions

thể giải pháp

có thể ứng dụng QT của bạn có thể phục vụ một WebSocket và bạn sẽ có thể để giao tiếp với điều đó từ javascript:

http://www.html5rocks.com/en/tutorials/websockets/basics/

nếu bạn không thể để phục vụ WebSockets từ bên trong ứng dụng QT, cách tiếp cận khác có thể tạo ra một "cầu nối" một kịch bản nhỏ mà có thể phục vụ một WebSocket để JavaScript và chuyển các thông điệp từ/tới ứng dụng QT

bạn sẽ tìm thấy nhiều ví dụ trên websockets, cách dễ dàng để thực hiện điều này có thể là tạo một máy chủ nhỏ sử dụng node.js để chơi với nó stackabuse.com/node-js -websocket-examples-with-socket-io/

oh! và thực hiện tìm kiếm cho chính sách "chính sách xuất xứ cùng một chính sách web"

Ví dụ về tiện ích mở rộng bằng cách sử dụng ổ cắm web (điều này sẽ hữu ích cho việc gỡ lỗi): chrome.google.com/webstore/detail/simple-websocket-client/pfdhoblngboilpfeibdedpjgfnlcodoo?hl = vi

hy vọng điều này sẽ giúp

+1

Đây cũng là những gì tôi đã tìm ra trong thời gian chờ đợi. Tôi đã phải nâng cấp nôn Qt5.2 để Qt5.3 vì sự hỗ trợ thêm cho các ổ cắm web mặc dù. Tôi đang sử dụng HTML5 chrome-side và Qt, không cần node.js. – user2366975

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