只是支持本尼林的非常有帮助的答案。
发生了什么事情是我们从包含流浪字母'c'的模板文件加载了Google Analytics代码。我们可以在我们的本地机器上看到这个,因为这个模板在Magento的管理设置中被禁用了,但是在生产环境中没有。
此问题似乎表明,当开发工具检查器上的<body>
标记中出现杂散字母而不是查看源页面时,可能是因为它位于<head>
部分。渲染时,浏览器似乎将<head>
部分中所有格式不正确的HTML都推送到<body>
部分。
例如,如果你打开Chrome浏览器下面的HTML,你会明白我的意思:
<!DOCTYPE html>
<html>
<head>
c<title>Title of the document in head</title>
<script type="text/javascript">
var test = "test";
</script>
</head>
<body>
The body of the document......
</body>
</html>
而且当我们寻找杂散信,我们巧妙地与下面的JavaScript删除使用XPath表达式针对DOM中的违规XML节点并仅删除该节点。
<script type="text/javascript">
function _x(STR_XPATH) {
var xresult = document.evaluate(STR_XPATH, document, null, XPathResult.ANY_TYPE, null);
var xnodes = [];
var xres;
while (xres = xresult.iterateNext()) {
xnodes.push(xres);
}
return xnodes;
}
jQuery(_x('//html/body/text()[contains(.,"c")]')).remove();
</script>
如果它不在页面源代码中,那么它肯定是由JS添加的。有其他的东西应该在那里吗?我在想它可能是一个数组被替换为一个字符串('var [0]'),所以你得到它的第一个字符。 – Shomz 2014-11-05 18:44:35
感谢@Shomz任何想法如何调试,以确定脚本造成这种情况?我试图设置铬检查器打破身体标记的子树修改,但它只能在jQuery中断 – Holly 2014-11-05 20:56:17
不客气。不幸的是,在我看来,没有简单/容易的东西,而是一种“蛮力”搜索任何修改DOM的内容(innerHTML,textContent等)。或者,如果您有相当数量的脚本加载,请尝试逐个禁用它们,以便您可以缩小问题来自哪个问题。 – Shomz 2014-11-05 21:05:47