拼接函数将相同的元素插入每个索引

Splice function inserting same elements into every index

本文关键字:插入 索引 元素 函数 拼接      更新时间:2023-09-26

我正在制作一个扩展程序,在您访问网站时跟踪Web请求。每次用户访问另一个网站时,扩展程序都会检查以查找站点数组中的最新条目,以便它知道在跟踪器数组中的哪个位置插入跟踪器,但是由于某种原因,它们都复制到跟踪器数组中的下一个元素。这是我的代码:

chrome.webRequest.onBeforeRequest.addListener(function(details) {
if (details.tabId == -1) {
    console.log("Skipping request from inactive tab");
    //return;
}
var notInteresting = Object.keys(activeTabs).every(function(key) {
    if (activeTabs[key] == details.tabId) {
        //Search for correct array index to insert trackers
        outerloop:
        for(i = (currentNum); i--; i < (currentNum-10)){
            //If the element doesn't exist
            if(typeof sites[i] !== 'undefined'){
                curNum = i;
                break outerloop;
            }
        }
        //Check for particular trackers on pages
        var s = details.url;
        console.log("1curNum = " + curNum);
        if(typeof trackers[curNum] === 'undefined'){
            trackers[curNum] = '';
        }
        //Code to identify the trakers based on the URL in webrequests
        if(s.indexOf('doubleclick.net') >= 0){
            console.log("Doubleclick Tracker: ", details.url);
            trackers.splice(curNum, 0, trackers[curNum] + ("<br> <b>Doubleclick Tracker: </b>"+ s));
            document.getElementById('tracker' + curNum).innerHTML = trackers[curNum];
        }
        else if(s.indexOf('googleads') >= 0){
            console.log("Google Ads Tracker: ", details.url);
            trackers.splice(curNum, 0, trackers[curNum] + ("<br> <b>Google Ads Tracker: </b>"+ s));
            document.getElementById('tracker' + curNum).innerHTML = trackers[curNum];
        }
        else if(s.indexOf('googlesyndication') >= 0){
            console.log("Google Adsense Tracker: ", details.url);
            trackers.splice(curNum, 0, trackers[curNum] + ("<br> <b>Google Adsense Tracker: </b>"+ s));
            document.getElementById('tracker' + curNum).innerHTML = trackers[curNum];
        }
        else if(s.indexOf('analytics') >= 0){
            console.log("Analytics Tracker: ", details.url);
            trackers.splice(curNum, 0, trackers[curNum] + ("<br> <b>Analytics Tracker: </b>"+ s));
            document.getElementById('tracker' + curNum).innerHTML = trackers[curNum];
        }
        else if(s.indexOf('connect.facebook') >= 0){
            trackers.splice(curNum, 0, trackers[curNum] + ("<br> <b>Facebook Tracker: </b>"+ s));
            document.getElementById('tracker' + curNum).innerHTML = trackers[curNum];
            console.log("Facebook Tracker: ", details.url);
        }
        else if(s.indexOf('scorecardresearch') >= 0){
            trackers.splice(curNum, 0, trackers[curNum] + ("<br> <b>Scorecard Research Tracker: </b>"+ s));
            document.getElementById('tracker' + curNum).innerHTML = trackers[curNum];
            console.log("Scorecard Research Tracker: ", details.url);
        }
        else if(s.indexOf('chartbeat') >= 0){
            trackers.splice(curNum, 0, trackers[curNum] + ("<br> <b>Chartbeat Tracker: </b>"+ s));
            document.getElementById('tracker' + curNum).innerHTML = trackers[curNum];
            console.log("Chartbeat Tracker: ", details.url);
        }
    } else {
    }
});

假设我首先加载CNN的网站,我会得到对"http://z.cdn.turner.com/analytics/cnnexpan/jsmd.min.js"的引用,然后在大约5个网站之后,总是弹出相同的链接。我花了几个小时试图弄清楚为什么上一个索引中的元素会被复制到新索引中,但我就是看不出问题所在。有什么建议吗?

我能找到的唯一问题是这些类型的行:

 trackers.splice(curNum, 0, trackers[curNum] + (...));

我认为它们应该是这样的:

 trackers.splice(curNum+1, 0, (...));

然后添加新的跟踪器,您的跟踪器也将在那里。

另一种简单的方法(感谢@rsanchez)就是简单地保持这样:

trackers[curNum] = trackers[curNum] + (...);

trackers.splice(curNum, 1, trackers[curNum] + (...));