0

我正在为可用于 Android 的开源浏览器编写 JavaScript,以用一些不同的文本替换加载到浏览器中的页面的正文标记中的文本。

应该解决这个问题,一旦页面加载到浏览器中,这个 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似乎不起作用。任何人都可以帮助我更正此代码或以任何其他方式执行此替换正文任务的任何建议吗?

谢谢!

4

1 回答 1

0

抱歉,您没有在 Android 浏览器中获得 DOM Level 3 XPath

虽然您可以使用 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');
于 2010-10-10T08:09:16.010 回答