从chrome扩展注入的脚本多次返回值

时间:2018-06-19 09:49:52

标签: javascript google-chrome-extension

我正在编写一个chrome扩展程序,通过向DOM注入一个脚本来跟踪用户的应用程序活动(他/她在线或离线的天气)但是当我运行它并运行时,我在firebase中获得了相同数字的多个条目只有一次,即使我每隔6秒写入一行注入脚本。这是我的文件,请看看

content.js

MetricDate  EmployeeID  Name            TeamManagerEmpID    TeamManagerName OpsManagerID    OpsManagerName  Department
01-Jan      210000      Peter Anderson  110000              Alex Broad      100000          Steve Anderson  BI
02-Jan      210000      Peter Anderson  110000              Alex Broad      100000          Steve Anderson  BI
03-Jan      210000      Peter Anderson  110000              Alex Broad      100000          Steve Anderson  BI
04-Jan      210000      Peter Anderson  110000              Alex Broad      100000          Steve Anderson  BI

untitled.js(background.js)

var nos ;

chrome.runtime.onMessage.addListener( function gotnumbers(data){
	nos = data; 
    console.log(nos);
	setInterval( injectJs() , 5000);
});

function injectJs() {
        var scr = document.createElement("script");
        scr.type= "text/javascript";
        scr.id = 
        scr.textContent = load() ; 
        console.log(scr);
        (document.head).appendChild(scr);  
	}

document.addEventListener('hello' , passing, false);
function passing(e){
	chrome.runtime.sendMessage(e.detail);
}


//code////////////////////////////////////////////////
function load(){
	var actualCode = '(' +  function(nos,randoms) { 
	console.log(nos + " injected");
    'use strict';		
	nos.forEach(async (item,index) => {
        var s = false;
		Store.Presence.find( item + '@c.us').then(function(d){
            if (d.isOnline){
                s = true ;
            }
    
            var event = new CustomEvent('hello', { 'detail' : { 'number' : item , 'status' : s , 'time' : Date.now()}});
            document.dispatchEvent(event);
        });
	});
} + '(' + JSON.stringify(nos) + ',' + Math.random() + '));' ; 
return actualCode;
//code//////////////////////////////////////////////////
}

1 个答案:

答案 0 :(得分:0)

正如wOxxOm在评论中所说,

您还将在onClicked中注入内容脚本,这将导致在chrome.runtime中注册侦听器函数的新实例。因此所有实例都会接收从后台页面发送到内容脚本的消息。

在内容脚本中将window.initDone设置为true并进行检查以避免重新注册。