2017-01-25 3 views
0

Я пишу расширение Chrome, которое меняет некоторые слова на веб-странице другим. Это то, что у меня есть, и я не получаю никаких слов для изменения и ошибок консоли.Расширение Chrome для изменения слов на странице

myscript.js

var text = $(this).text(); 
var mapObj = { 
    is:"tests", 
    a:"AAAAAAAA", 
    the:"testing" 
}; 
var re = new RegExp(Object.keys(mapObj).join("|"),"gi"); 
$(this).text(text.replace(re, function(matched){ 
    return mapObj[matched.toLowerCase()]; 
})); 

manifest.json

{ 
    "manifest_version": 2, 

    "name": "example", 
    "description": "bla", 
    "version": "1.0", 

/* "browser_action": { 
    "default_icon": "icon.png", 
    "default_popup": "popup.html" 
    },*/ 
    "content_scripts": [ 
    { 
     "matches": ["<all_urls>"], 
     "js":["js/jquery-3.1.1.js", "myscript.js"], 
     "run_at": "document_end" 

    } 
    ], 
    "permissions": [ 
    "activeTab", 
    "<all_urls>" 
    ] 
} 

Я последовал this guys answer, но это не меняя слова для меня. Что я делаю не так?

UPDATE Я попытался это:

$(this).text(text.replace(new RegExp("the", "g"), "test")); 

и она работает. и это:

document.body.innerHTML = document.body.innerHTML.replace(new RegExp("the", "g"), "hunter"); 

и она работает. Так что, очевидно, что-то делать с этим (а не каким-либо другим файлом или разрешения Correct.):

var re = new RegExp(Object.keys(mapObj).join("|"),"gi"); 
$(this).text(text.replace(re, function(matched){ 
    return mapObj[matched.toLowerCase()]; 
})); 

В конце концов, я хочу проходной каждое слово и испытание, если оно должно быть изменен, и если поэтому измените его. Пожалуйста, дайте мне знать, если есть лучший способ.

+0

@ IvánNokonoko хороший глаз, я только что был вопрос SE помечено неправильно. Файл правильно назван myscript.js. – hunterInt

+0

попробуйте изменить '' разрешения ': [...] 'с правами': ["activeTab"] "'. Вы уже объявляете 'content_scripts> соответствия>" "'. Надеюсь, поможет! – ramabarca

+0

'this' равен' window' объекту в вашем коде, который вам не нужен. На самом деле весь код неверен, поскольку он разрушает структуру html. Посмотрите на правильные примеры, которые используют createTreeWalker или document.evaluate для обработки элементов html по отдельности. – wOxxOm

ответ

0

Найден ответ, делая это:

var html = document.querySelector('html'); 
var walker = document.createTreeWalker(html, NodeFilter.SHOW_TEXT); 
var node; 


    var oneArray= ["the"]; 
    var twoArray= ["bob"]; 
    var one; 
    var two; 


while (node = walker.nextNode()) { 
    for (i=0; i<engWords.length;i++) { 

     one= new RegExp(oneArray[i],"g"); 
     two= twoArray[i]; 

     node.nodeValue = node.nodeValue.replace(one, two); 

    } 

}