繁体   English   中英

键盘代码无法在Chrome扩展程序中使用

[英]Keycode not working in chrome extension

我正在写一个chrome扩展名,它应该更改http响应的内容类型。 一切正常。 现在,我想使用按键来控制它,即用户应该能够绕过按键上扩展的默认操作。 我试过了,但是不起作用:

background.js

var enableEXT = true;
window.onkeydown = function() 
{
    console.log('Testing hello');
    if (event.keyCode == 70)
        enableEXT = false;
    console.log(event.keyCode);
    console.log(enableEXT);
};
window.onkeyup = function() 
{
    enableEXT = true;
    console.log(event.keyCode);
};
chrome.webRequest.onHeadersReceived.addListener(function(details) {
for (var i = 0; i < details.responseHeaders.length; ++i) 
{
    if (details.responseHeaders[i].name.toLowerCase() == 'content-type' && !enableEXT)
        details.responseHeaders[i].value = 'application/xyz';
}
return {responseHeaders: details.responseHeaders};
}, {urls: ["<all_urls>"]}, ['blocking', 'responseHeaders']);

尝试使用注入到网页中的内容脚本,而不是背景脚本。 在manifest.json中使用它:

"content_scripts" : [{
    "js" : ["myScript.js"]
}]


"permissions": [
    "tabs", "http://*/*", "https://*/*"
]

但是,Chrome扩展程序是从页面中其他脚本沙盒化的。 但是,您确实可以访问DOM,并且可以插入自己的标签。 因此,创建一个新的<script>标记并将其附加到DOM,它引用的新脚本(script.js)可以包含所需的事件侦听器。

background.js:

chrome.runtime.onConnect.addListener(function(port) {
  port.onMessage.addListener(function(msg) {
    enableEXT = msg.enableEXT;
  });
});

chrome.webRequest.onHeadersReceived.addListener(function(details) {
for (var i = 0; i < details.responseHeaders.length; ++i) 
{
    if (details.responseHeaders[i].name.toLowerCase() == 'content-type' && !enableEXT)
        details.responseHeaders[i].value = 'application/xyz';
}
return {responseHeaders: details.responseHeaders};
}, {urls: ["<all_urls>"]}, ['blocking', 'responseHeaders']);

myScript.js:

//to inject into the page
var s = document.createElement('script');
s.src = chrome.extension.getURL("script.js");
s.onload = function() {
    this.parentNode.removeChild(this);
};
(document.head||document.documentElement).appendChild(s);

//to communicate with our background
var port = chrome.runtime.connect();

window.addEventListener("message", function(event) {
    // We only accept messages from ourselves
    if (event.source != window)
      return;

    if (event.data.type && (event.data.type == "FROM_PAGE")) {
      port.postMessage(event.data);
    }
}, false);

script.js:

window.onkeydown = function() 
{
    if (event.keyCode == 70)
        window.postMessage({ enableEXT: true, "*");
};
window.onkeyup = function() 
{
    window.postMessage({ enableEXT: false, "*");
};

在注入的代码,内容脚本和背景页面之间进行通信是一种非常尴尬的情况,但是可以使用所有postMessage API来处理...

向分配给事件的事件处理程序中添加一个名为event的参数,如下所示:

window.onkeydown = function(event) 
{
    console.log(event.keyCode);
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM