HTML中的下划线模板生成神秘的404错误

时间:2013-01-10 09:33:25

标签: javascript html ruby-on-rails underscore.js

好的,我在我的Rails应用程序中,在页面的某个位置有_template.html.erb呈现的下划线模板(简化版):

<script type="text/html" id="mytemplate">
<div class="foo">
  <img src="{{= my_variable }}" />
</div>
</script>

然后我会在需要时在其他地方渲染它:

// change it to mustache-style because of defaults clashing with erb
_.templateSettings = {
  interpolate: /\{\{\=(.+?)\}\}/g,
  evaluate: /\{\{(.+?)\}\}/g
};

options = {
  my_variable: '/foo/bar/baz.img'
}

compiled = _.template($("#mytemplate").html());
$(compiled(options)).appendTo("#wherever");

理论上,这应该可以正常工作,除此之外的错误开始在服务器日志和其他地方出现,浏览器404在诸如http://example.com/{{=%20my_variable%20}}http://example.com/foo/{{=%20my_variable%20}}之类的网址上。 / p>

现在,我的预感是因为它与img标签有关,并且某种程度上浏览器会尝试GET来自页面,甚至虽然它包含在script标签中,但我不知道为什么在地球上。这是许多人推荐的将下划线模板嵌入HTML的推荐方法之一。而且我无法将其归因于旧浏览器和/或机器人,因为服务器日志显示这些是使用最新Chrome等的真人。

编辑:经过一番调查后,1。它只发生在少数人(独特的IP)上2.所有人都在使用最新版本的Chrome。那么也许这是一个延伸不见了?

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您必须将type="text/html"更改为不存在的内容,例如type="x-template"(或其他任何内容)

如果缓存已全部清除,这通常有效。

如果没有真正做到这一点,那么您可以使用外部模板(您加载的文件)。但是如果你想让它们保持内联,那么逃避问题字符(使用内部JS字符编码)。这将由JS解析相同,但不会被HTML解析器捕获。

您可以使用此工具:http://mothereff.in/js-escapes(取消选中“仅转义非ASCII和不可打印的ASCII字符”框)

这就是它的样子:

<script type="text/html" id="mytemplate">
<div class="foo">
  \x3Cimg src="{{= my_variable }}" />
</div>
</script>