2012-10-01 30 views
7

Hai phần câu hỏi:Capture Mac phím điều khiển media trong một phần mở rộng Chrome

  1. Có cách nào để chụp (phản ứng với cấp bách của) các phím điều khiển media playback trên bàn phím Mac (trước đó, chơi/tạm dừng , tiếp theo) trong tiện ích mở rộng của Google Chrome sử dụng JavaScript đúng?
  2. if (answerToQuestion1 === "no") có cách nào để thực hiện việc này bằng cách sử dụng một số loại native plugin (C/C++) không?

Tôi biết rằng điều này có thể thực hiện được, vì Unity Music Media Keys làm điều đó (mặc dù tôi biết rằng họ đang sử dụng plugin gốc).

Những gì tôi đã xem xét cho đến nay là this plugin, mà tuyên bố để làm điều đó, nhưng thực sự đòi hỏi FunctionFlip để làm cho các phím hoạt động như phím chức năng, và phản ứng với cấp bách của F7, F8, và F8.

Trả lời

8

1 - nope = [

2 - Whoa - holy crap. Tôi đã không thấy phần mở rộng này trước đây, vì vậy cảm ơn bạn vì điều đó. Tôi đào sâu vào nó một chút, và có vẻ như họ cài đặt một .plugin trên osx và một dll cho cửa sổ hỗ trợ.

Plugin bị biên dịch chỉ là một vài trăm dòng - https://gist.github.com/3849247.

Họ đang sử dụng https://github.com/nevyn/SPMediaKeyTap làm cách để cắm trực tiếp vào các phím phương tiện (trên os x). Họ đang chuyển tiếp thông qua một máy chủ socket.io cục bộ chạy trên cổng 12345 tới trình duyệt và plugin đang lắng nghe các sự kiện được kích hoạt trên nó.

supppper gọn gàng.

EDIT: này bây giờ là natively supported in chrome

+0

+1 Cảm ơn sự giúp đỡ. Tôi chắc chắn sẽ xem xét những điều này. – Whymarrh

3

Cuối cùng tôi quản lý để thực hiện những gì tôi đã nhận được ở. Tiện ích mở rộng Chrome cuối cùng có thể xem trên GitHub.

Tính năng này hoạt động như thế nào? Phần mở rộng mà ban đầu tôi liên kết với yêu cầu các phím chức năng được "lật" để thực sự là phím chức năng và không có mục đích đặc biệt, nhưng làm như vậy yêu cầu thêm phím tắt để thực hiện các chức năng đặc biệt (chẳng hạn như điều khiển bàn phím backlights , âm lượng, v.v.)

Với sự giúp đỡ rất lớn từ Patrick's answer, tôi đã sử dụng các bộ phận từ nevyn/SPMediaKeyTap để nắm bắt những phím bấm bên ngoài phần mở rộng và libwebsockets để bắn chúng cho phần mở rộng:

- (void) handleKeyCode: (int) kcode withKeyState: (int) kstate 
{ 
    if (kstate) { 
     return; // keydown 
    } 
    // keyup 
    int len = 1; 
    unsigned char data[LWS_SEND_BUFFER_PRE_PADDING + len + LWS_SEND_BUFFER_POST_PADDING]; 
    data[LWS_SEND_BUFFER_PRE_PADDING] = kcode; 
    for (int i = 0; i < num_clients; i++) { 
     libwebsocket_write(clients[i], &data[LWS_SEND_BUFFER_PRE_PADDING], len, LWS_WRITE_TEXT); 
     NSLog(@"Sent %d", kcode); 
    } 
} 

Bên trong Chrome, phần mở rộng chỉ đơn giản là tiêm mảnh phù hợp của JS vào trang chủ:

this.onmessage = function (message) { 
    var keyCode = message.data.charCodeAt(0); 
    if (keyCode === 20) { 
     inject(function() { 
      window.R.player.previous(); 
     }); 
    } 
    if (keyCode === 16) { 
     inject(function() { 
      window.R.player.playPause(); 
     }); 
    } 
    if (keyCode === 19) { 
     inject(function() { 
      window.R.player.next(); 
     }); 
    } 
}; 
Các vấn đề liên quan