我遇到了一个问题,即 html.ts 文件在某些页面上运行了两次,即使在浏览器中关闭了 AJAX 也是如此。这似乎不是映射问题,因为即使我注释掉所有映射,它也会这样做。该页面在 Chrome 浏览器中看起来不错。
2 回答
如果 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>
标签。
也可能是有两个<html>
标签开头!这些正在您的 html.ts 文件中被选中。由于 html.ts 文件以 selector 开头$("/html") {
,如果是这种情况并且有两个<html>
标签,那么代码将运行两次。
检查页面上可能导致此问题的 iframe!