JavaScript для замены текста в теге body страниц, загруженных в браузер с открытым исходным кодом для Android - PullRequest
0 голосов
/ 10 октября 2010

Я пишу JavaScript для браузера с открытым исходным кодом, доступный для Android, чтобы заменить текст в теге body страниц, загруженных в браузер. с каким-то другим текстом.

Это должно быть исправлено, чтобы при загрузке страницы в браузер этот JavaScript выполнялся, и выполнялись замены, и, наконец, страница с замененным текстом видна в браузере.

Это заменяющая часть кода:

var textnodes, node, i;
textnodes = document.evaluate("//body//text()[not(ancestor::script) and not(ancestor::style)]",document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
replace();
function replace() {
   for (i = 0; i < textnodes.snapshotLength; i++) {
      node = textnodes.snapshotItem(i);
      text = node.data;
      text = text.replace(/\'/g, "♥");
      //The rest of the replacements
      node.data = text;
   }
}

Однако document.evaluate, похоже, не работает. Может ли кто-нибудь помочь мне исправить этот код или какие-либо предложения по выполнению этой задачи по замене основного текста каким-либо другим способом?

Спасибо!

1 Ответ

0 голосов
/ 10 октября 2010

Извините, вы не получаете DOM XPath уровня 3 в браузере Android .

Хотя вы можете использовать реализацию JavaScript XPath ( например ), это будет медленное и громоздкое решение по сравнению с написанием конкретного кода обхода DOM.

function replaceInTextNodes(parent, needle, replacement) {
    for (var child= parent.firstChild; child!==null; child= child.nextSibling) {
        if (child.nodeType===1) { # Node.ELEMENT_NODE
            var tag= child.tagName.toLowerCase();
            if (tag!=='script' && tag!=='style' && tag!=='textarea')
                replaceInTextNodes(child, needle, replacement);
        }
        else if (child.nodeType===3)
            child.data= child.data.replace(needle, replacement);
    }
}
replaceInTextNodes(document.body, /'/g, '\u2665');
...