我正在尝试构建一个可在Firefox和chrome上使用的插件,以便开始使用扩展程序(它不是要发布的扩展程序)。我的目标基本上是恢复鼠标的移动和选项卡的屏幕快照,并通过REST API发送它们。
截至昨天,一切正常,但在今天进行测试时,出现错误,指出内容脚本无法与我的后台脚本进行通信。
我检查过是否有隔夜发布的新版firefox,据我所知似乎并非如此。然后,我对google runtime APIs进行了广泛检查,并且我的代码似乎是根据文档构造的。 更有意思的是,即使进行了多次试验,一切都可以正常工作。
如果我尝试打印已发送邮件的内容,则不会打印任何内容。
当我在firefox上加载临时插件时,我得到一个临时ID,并且得到的错误如下:
错误:无法建立连接。接收端不存在。
background.js:1:745未经检查的lastError值:错误:无法 建立连接。接收端不存在。 background.js:1sendRequestToSpecificTab moz-extension://94826cb7-3494-4f28-abda-e0dbb477ca37/js/background.js:1
我注意到错误中指定的ID与加载插件时提供的ID不同。
这是我的代码:
keylog.js
//capturing the mouse movements
window.addEventListener("mousemove", logMouseMove, false);
window.addEventListener("mousedown", logMouseDown, false);
function logMouseMove(e) {
let currentdate = Date.now();
chrome.runtime.sendMessage({action: "mouselog",data : currentdate+': ('+e.pageX+','+e.pageY+')'});
}
function logMouseDown(e) {
let currentdate = Date.now();
chrome.runtime.sendMessage({action: "mouselog",data :currentdate+': ['+e.pageX+','+e.pageY+']'});
}
和background.js:
"use strict";
let concatenated = "";
let mouse_coord={};
let mouse_json = {};
var id = "";
chrome.runtime.onMessage.addListener(msg => {
var ID = function () {
return '_' + Math.random().toString(36).substr(2, 9);
};
if(msg.action == "mouselog") {
let splitted = msg.data.split(':');
mouse_coord[splitted[0]] = splitted[1];
console.log(msg.data);
if(splitted[1].charAt(0) === '[') {
id = ID();
mouse_json[id] = mouse_coord;
mouse_coord = {};
concatenated += JSON.stringify(mouse_json, null, 4);
let donnes= {};
donnes['id'] = id;
donnes['data'] = mouse_json;
chrome.tabs.query({active: true, currentWindow:true}, (tab) => {
donnes['tab'] = tab;
sendData('http://localhost:33333/mouselog', JSON.stringify(donnes));
});
mouse_json = {};
chrome.tabs.captureVisibleTab(
null,
{},
function(dataUrl)
{
let data = {};
data['id'] = id;
data["data"] = dataUrl;
sendData('http://localhost:33333/saveimg', JSON.stringify(data));
console.log('Sent screenshot');
}
);
try {
chrome.tabs.executeScript(null, {
file: 'injection_script.js'
}, function() {
if (chrome.runtime.lastError) {
message.innerText = 'There was an error injecting script : \n' + chrome.runtime.lastError.message;
}
});
} catch(err) {
console.error(err);
}
}
}
});
我还在清单上声明了所有必要的权限: “ all_urls”,“ activeTab”,“存储”,“标签”,“ webRequest”
我在做错什么吗?我没有在上次测试的代码上更改任何一行,因此我怀疑问题可能不是我的代码,而是浏览器?