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

标签 javascript

正在运行类似:

document.body.innerHTML = document.body.innerHTML.replace('旧值', '新值')

危险吗?

我担心某些浏览器可能会搞砸整个页面,并且由于这是将放置在我无法控制的站点上的 JS 代码,谁知道哪些浏览器可能会访问我有点担心.

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

最佳答案

绝对有潜在危险 - 特别是如果您的 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');
}

其中 xpath() 是一个自定义的跨浏览器 xpath 函数:

function xpath(str){
  if(document.evaluate){
    return document.evaluate(str,document,null,6,null);
  }else{
    return document.selectNodes(str);
  }
}

关于javascript - 使用 document.body.innerHTML.replace 有多安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3320486/

相关文章:

javascript - 使用 React.js 通过 facebook google twitter 进行身份验证

javascript - 如何通过自定义属性获取另一个元素内元素内的文本

javascript - 带有事件背景元素的 Angular Bootstrap $modal

javascript - 用于带有旋转矩形的 2d 碰撞检测的 javascript 函数?

javascript - DOM 加载后,Jquery 函数无法与多个函数一起使用

javascript - 如何禁用注入(inject)分隔符的 eslint 解析错误?

javascript - Microsoft Javascript 插件 : read/write to Excel, 访问

javascript - 将预定义的 HTML 连接到 Backbone 中的模型和 View

javascript - 如何自定义插入符号?

javascript - 第一个和第二个的写法有什么区别