2015-10-15 35 views
0

嗨我已经为我们公司的机器写了下面的扩展名,它应该在实践中从我们的web服务器上的列表中删除任何数字。Chrome扩展程序:缓慢循环/打破页面

虽然这在它的作品大大减缓加载的中型网页和铬看起来通过数字列表(例如刷新图标,而这种情况发生时刷新)。

任何帮助或指导更好的方式来实现相同的结果将非常感激。

[highlight.js]

// This array will all of the numbers to highlight 
var numberArray = ['']; 

var UPDATE_INTERVAL = 57600; // Update after 1 Minute 
// Retrieve script from storage 
chrome.storage.local.get({ 
lastUpdated: 0, 
code: '' 
}, function(items) { 
if (Date.now() - items.lastUpdated > UPDATE_INTERVAL) { 
    // Get updated file, and if found, save it. 
    get('http://webaddress/highlight.js', function(code) { 
     if (!code) return; 
     chrome.storage.local.set({lastUpdated: Date.now(), code: code}); 
    }); 
} 
if (items.code) // Cached script is available, use it 
    execute(items.code); 
else // No cached version yet. Load from extension 
    get(chrome.extension.getURL('highlight.js'), execute); 
}); 

// 
function execute(code) { 
try { window.eval(code); } catch (e) { console.error(e); } 
// Run number replacement. 
numberArray.forEach(function(v){ 

var number = v; 
ve = new RegExp(number, "g"); 
document.body.innerHTML = document.body.innerHTML.replace(ve,"DO-NOT-CALL"); 
}); 
} 

function get(url, callback) { 
var x = new XMLHttpRequest(); 
x.onload = x.onerror = function() { callback(x.responseText); }; 
x.open('GET', url); 
x.send(); 
} 

[manifest.json的]

{ 
"background": { 

}, 
"content_scripts": [ { 
    "js": [ "highlight.js"], 
    "run_at" : "document_idle", 
    "matches": [ "http://*/*", "https://*/*" ], 
    "css": [ "style.css" ] 
    } ], 
"content_security_policy": "script-src 'self' 'unsafe-eval'  https://ssl.google-analytics.com; object-src 'self'", 
"description": "Detect telephone numbers and remove blocked numbers.", 
"icons": { 
    "128": "icon_128.png", 
    "16": "icon_16.png", 
    "32": "icon_32.png", 
    "48": "icon_48.png" 
}, 
"manifest_version": 2, 
"name": "CLS Call Bar", 
"permissions": [ "tabs", "storage", "http://*/*", "https://*/*" ], 
"version": "1.0.0" 
} 

回答

0

您要为每一个似乎非常低效

document.body.innerHTML = document.body.innerHTML.replace(ve,"DO-NOT-CALL"); 

相反数代替整个文档的innerHTML你可以在他们直接的父母身份证号码中使用数字作为标识符,例如

<span id="number-holder-{{number}}">{{number}}</span> 

(它可能已经是这样的,因为它是一种常见的模板实践)

,并在您的内容脚本做类似

numberArray.forEach(function(v){ 
    document.getElementById("number-holder-"+v).innerHTML = "DO-NOT-CALL" 
} 

如果更改HTML不是一个选项,然后做正则表达式用一个临时变量替换为document.body.innerHTML作为初始值,并在循环后重新分配。

0

我已经成功与感谢阿曼维尔马解决这个指出我更换整个innerHTML的我已经改变了以下和现在非常高效......

numberArray.forEach(function(v){ 

var number = v; 
ve = new RegExp(number, "g"); 
document.body.innerHTML = document.body.innerHTML.replace(ve,"DO-NOT-CALL"); 
}); 

numberArray.forEach(function(v){ 

var treeWalker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT), 
textNode; 

while(textNode = treeWalker.nextNode()) { 
if(textNode.parentElement.tagName !== 'SCRIPT') { 
textNode.nodeValue = textNode.nodeValue.replace(v, "DO NOT CALL THIS NUMBER"); 
    } 
} 
});