2

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

<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");

从理论上讲,这应该可以正常工作,并且确实可以,除了像这样的错误开始在服务器日志和其他地方弹出,浏览器在 URL 上出现 404 错误,例如:http://example.com/{{=%20my_variable%20}}http://example.com/foo/{{=%20my_variable%20}}.

现在,我的预感是它与它是一个标签这一事实有关,img并且浏览器以某种方式尝试GET从页面访问它,即使它被包装在script标签中,但我不知道到底为什么。这是许多人推荐的将下划线模板嵌入 HTML 的方法之一。而且我也不能将其归因于较旧的浏览器和/或机器人,因为服务器日志显示这些是使用最新 Chrome 等的真实用户。

编辑:经过多一点调查,1. 它只发生在少数人(独特的 IP) 2. 他们都使用最新版本的 Chrome。所以也许这是一个失控的扩展?

有任何想法吗?

4

1 回答 1

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>
于 2013-01-10T17:08:41.837 回答