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

nar*_*ece 4 ajax moovweb

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

小智 6

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

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

match($content_type) {
  with(/html/) {
Run Code Online (Sandbox Code Playgroud)

添加这个,删除</body></html>标签并将它们追加到最后:

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

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

源可能在Chrome中看起来不错,因为当Tritium代码操作页面时,它会将两个<html>标签中的内容移动到第一个标签中,当Chrome收到页面时,它将擦除第二个空<html>标签.