使用document.body.innerHTML.replace有多安全?

MB.*_*MB. 5 javascript

正在运行如下:

document.body.innerHTML = document.body.innerHTML.replace('old value','new value')

危险吗?

我担心也许某些浏览器可能搞砸了整个页面,因为这是JS代码,它将被置于我无法控制的网站上,谁可能会被谁知道哪些浏览器我有点担心.

我的目标只是在整个身体中寻找一个字符串的出现并替换它.

luc*_*eer 6

绝对有潜在危险 - 特别是如果您的HTML代码很复杂,或者它是其他人的HTML代码(即它的CMS或您创建可重用的JavaScript).此外,它将销毁您在页面上的元素上设置的任何事件监视器.

使用XPath查找文本节点,然后直接替换它.

像这样的东西(根本没有测试过):

var i=0, ii, matches=xpath('//*[contains(text(),"old value")]/text()');
ii=matches.snapshotLength||matches.length;
for(;i<ii;++i){
  var el=matches.snapshotItem(i)||matches[i];
  el.wholeText.replace('old value','new value');
}
Run Code Online (Sandbox Code Playgroud)

哪里xpath()是沿着线定制的跨浏览器的XPath函数:

function xpath(str){
  if(document.evaluate){
    return document.evaluate(str,document,null,6,null);
  }else{
    return document.selectNodes(str);
  }
}
Run Code Online (Sandbox Code Playgroud)