无法在<script>标记或</script>上呈现页面或DOMDocumentFragment中断

时间:2011-01-20 04:51:07

标签: php javascript domdocument

经过一些试验和错误后,我注意到我的模板引擎在包含<script>标签的模板文件上失败。这显然是一个很大的问题,但我似乎无法弄清楚它为什么会失败。

它也是非常奇特的,它失败的方式。注释掉<script>代码后,页面会正常加载,但如果取消注释<script>代码,则会加载页面,执行查看源会显示整个页面已加载虽然在浏览器中没有呈现任何内容。 Firebug DOM检查器显示头标记和空体。

陌生人部分(我认为至少)是这些脚本标签针对的是外部文件。如果在CDATA部分之外有页内脚本,我可以理解一些意想不到的结果。

我发布了所使用的代码,但它太长了,我不知道从哪里开始,即;问题出在哪里,实际上甚至还有一个。

简而言之,我的模板引擎会创建一个DOMDocument对象,然后创建DOMDocumentFragment个对象来管理模板的各个部分。第一次解析迭代通常将整个模板文件加载到一个片段中,然后根据某些参数在树下工作,查找某些标记。

TL; DR:有谁知道为什么PHP DOM类可能由于脚本标记而无法正确构建页面?如果我将它们放在<![CDATA[ ... ]]>标签中,它什么都不做。只有当我删除或注释掉标记时,浏览器才会加载呈现页面。

1 个答案:

答案 0 :(得分:2)

脚本标记的内容是否包含在CDATA块中?如果不是,DOM将尝试解析其内容并失败。确保所有脚本代码都包装在CDATA块中,并且DOM解析器配置为输出CDATA块(否则输出将包含空脚本标记)。

我还建议尽可能多地将脚本代码放在页面外,并将其放在自己的文件中,然后用<script src="/path/to/script.js"></script>标记链接到这些文件。这避免了DOM解析问题,并且具有浏览器仅需要加载一次代码并且可以在后续页面视图中缓存它的额外好处。