正在运行类似:
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/