4

我遇到了一个问题,即 html.ts 文件在某些​​页面上运行了两次,即使在浏览器中关闭了 AJAX 也是如此。这似乎不是映射问题,因为即使我注释掉所有映射,它也会这样做。该页面在 Chrome 浏览器中看起来不错。

4

2 回答 2

6

如果 AJAX 或其他任何东西都没有插入页面,那么这可能是由于 html 格式不正确。如果<head>,<body>或之外的源代码中有任何内容,则<html>Gokogiri 会将外围标记包装在单独的<html>标记中。然后由于有两个开始和结束<html>标签,html.ts 将运行两次。解决方案是在我们告诉 Gokogiri 如何处理它之前捕获传入的页面,并通过确保所有内容都包含在<body>标签中来修复损坏的 html。

在项目文件夹的 scripts/main.ts 中,之后

match($content_type) {
  with(/html/) {

添加这个,它会删除</body>and</html>标记并将它们附加到末尾:

  # wrap markup that is outside the body so tritium doesn't get applied twice
  replace(/\<\/body\>/,"")
  replace(/\<\/html\>/,"")
  append("</body> </html>")

这应该确保只有一个打开的结束<html>标签被传递给 Gokogiri 并且 html.ts 只运行一次,因为我们想要它!

源代码在 Chrome 中看起来不错的原因是,当 Tritium 代码处理页面时,它将两个<html>标签中的内容移动到第一个标签中,当 Chrome 接收到页面时,它将擦除第二个空<html>标签。

于 2013-04-16T07:33:46.527 回答
2

也可能是有两个<html>标签开头!这些正在您的 html.ts 文件中被选中。由于 html.ts 文件以 selector 开头$("/html") {,如果是这种情况并且有两个<html>标签,那么代码将运行两次。

检查页面上可能导致此问题的 iframe!

于 2013-04-17T17:04:34.533 回答