html.ts文件在我的moovweb项目中运行了两次

时间:2013-04-16 06:51:42

标签: ajax moovweb

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

2 个答案:

答案 0 :(得分:6)

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

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

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

添加此项,删除</body></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>标签。

答案 1 :(得分:2)

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

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