后台脚本和内容脚本之间的通信问题

时间:2019-02-04 17:50:39

标签: javascript google-chrome-extension firefox-addon

我正在尝试构建一个可在Firefox和chrome上使用的插件,以便开始使用扩展程序(它不是要发布的扩展程序)。我的目标基本上是恢复鼠标的移动和选项卡的屏幕快照,并通过REST API发送它们。

截至昨天,一切正常,但在今天进行测试时,出现错误,指出内容脚本无法与我的后台脚本进行通信。

我检查过是否有隔夜发布的新版firefox,据我所知似乎并非如此。然后,我对google runtime APIs进行了广泛检查,并且我的代码似乎是根据文档构造的。 更有意思的是,即使进行了多次试验,一切都可以正常工作。

如果我尝试打印已发送邮件的内容,则不会打印任何内容。

当我在firefox上加载临时插件时,我得到一个临时ID,并且得到的错误如下:

  

错误:无法建立连接。接收端不存在。
  background.js:1:745未经检查的lastError值:错误:无法   建立连接。接收端不存在。 background.js:1

     

sendRequestToSpecificTab   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”

我在做错什么吗?我没有在上次测试的代码上更改任何一行,因此我怀疑问题可能不是我的代码,而是浏览器?

0 个答案:

没有答案