我正在编写一个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//////////////////////////////////////////////////
}
答案 0 :(得分:0)
正如wOxxOm在评论中所说,
您还将在onClicked
中注入内容脚本,这将导致在chrome.runtime
中注册侦听器函数的新实例。因此所有实例都会接收从后台页面发送到内容脚本的消息。
在内容脚本中将window.initDone
设置为true并进行检查以避免重新注册。