【问题标题】:Underscore template in HTML generating mysterious 404 errorsHTML 中的下划线模板生成神秘的 404 错误
【发布时间】:2013-01-10 09:33:25
【问题描述】:

好的,我有这个下划线模板(简化版),从 _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");

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

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

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

有什么想法吗?

【问题讨论】:

  • 尝试将type="text/html" 更改为不存在的type="x-template"(或其他任何东西)
  • @SimonBoudrias 不,不是这样。我已经将它从text/template 更改为text/html,希望能解决它,现在更改为x-template,它仍然每天发生几次。
  • 嘿@KTamas,我用 2 种可能的解决方法在下面编辑了我的答案

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


【解决方案1】:

您必须将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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多