2014-11-05 59 views
0

我们刚刚推出了新的Magento网站,字母'c'在标签后立即出现在引号中。它没有在我的本地机器或我们的QA站点上显示过,我检查过模板文件,但它也不在那里。我几乎可以肯定,它不能成为一个代码问题,因为我们有相同的代码在本地运行,在我们的QA站点上使用GIT进行版本控制。字母出现在正文标签后

我们已经清除了缓存,并试过检查JavaScript是否用chrome开发工具插入它,但什么都没发现。

奇怪的是,'c'不在视图源文件中,但我可以用铬检查器看到它。

enter image description here

我也并不认为它可以从Magento的CMS页/块,因为它的标签后立即加载到来。

+1

如果它不在页面源代码中,那么它肯定是由JS添加的。有其他的东西应该在那里吗?我在想它可能是一个数组被替换为一个字符串('var [0]'),所以你得到它的第一个字符。 – Shomz 2014-11-05 18:44:35

+0

感谢@Shomz任何想法如何调试,以确定脚本造成这种情况?我试图设置铬检查器打破身体标记的子树修改,但它只能在jQuery中断 – Holly 2014-11-05 20:56:17

+0

不客气。不幸的是,在我看来,没有简单/容易的东西,而是一种“蛮力”搜索任何修改DOM的内容(innerHTML,textContent等)。或者,如果您有相当数量的脚本加载,请尝试逐个禁用它们,以便您可以缩小问题来自哪个问题。 – Shomz 2014-11-05 21:05:47

回答

1

感谢您的链接。查看网页源代码之后,你必须在头区域一个额外的c字符:

<!-- END GOOGLE ANALYTICS CODE --> 
c<script type="text/javascript">//<![CDATA[ 
     var Translator = new Translate([]); 
     //]]></script> 

注意c中的脚本标记之前?

+0

万分感谢,那肯定是:) – Holly 2014-11-05 21:47:28

1

只是支持本尼林的非常有帮助的答案。

发生了什么事情是我们从包含流浪字母'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>