最终,我设法完成了我的目标。最终的 Chrome 扩展可以在GitHub 上看到。
它是如何工作的?
我最初链接到的扩展要求功能键“翻转”实际上是功能键并且没有特殊用途,但这样做需要额外的击键才能执行特殊功能(例如控制键盘背光、音量等)。
在Patrick 的回答的大力帮助下,我使用了nevyn/SPMediaKeyTap的部件来捕获扩展外的按键,并使用 libwebsockets将它们触发到扩展:
- (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);
}
}
在 Chrome 中,扩展只是将适当的 JS 片段注入到主机页面中:
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();
});
}
};