gpt4 book ai didi

javascript - 键码在 chrome 扩展中不起作用

转载 作者:行者123 更新时间:2023-11-30 12:57:04 24 4
gpt4 key购买 nike

我正在写一个 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']);

最佳答案

尝试使用注入(inject)到网页中的内容脚本,而不是后台脚本。在您的 manifest.json 中使用它:

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


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

但是,chrome 扩展与页面中的其他脚本是沙盒化的。但是,您确实有权访问 DOM,并且可以注入(inject)自己的标签。所以,创建一个新的 <script>标记并将其附加到 DOM,它引用的新脚本 (script.js) 可以包含您想要的事件监听器。

背景.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);

脚本.js:

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

在注入(inject)的代码、内容脚本和后台页面之间进行通信是一个非常尴尬的情况,但可以通过所有 postMessage API 来解决...

关于javascript - 键码在 chrome 扩展中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18677142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com