有一些服务(如 FB like 或 AddThis)提供了一段代码。看起来像
<div class="service-name" data-something="x"></div>
<script type="text/javascript" src="http://example.com/service-name.js"></script>
好的,很酷,所以通常你将它粘贴到你的 HTML 中并且它可以工作。不是流星。
这是我看到的:
<script>
模板/正文内部 未加载——我在资源中没有看到它,Meteor 中的某些东西实际上阻止浏览器将其识别为 JS 文件- 它从
<head>
开始工作
现在这里是问题和问题:
- 我不想从加载它
<head>
因为速度 - 即使我从那里加载它——我们有 QA 和 PROD 环境。他们 必须 从不同的域加载此脚本(例如
service-domain-qa.example
与example.com
)
令人惊讶的是,您 不能 在 <head>
中使用模板助手/变量。
对于传统框架,这根本不是问题——您可以在任何地方包含脚本,它们就会加载;您可以在 服务器 模板的任何部分使用逻辑/变量。
那么,我应该如何在 Meteor 中执行此操作?让我重复一遍:
- 我需要将一些外部脚本(托管在第 3 方域上)加载到我的应用程序页面中
- 无法将此 脚本保存到我的项目文件夹中
- 脚本路径取决于环境(我们已经有了设置系统),所以渲染它的模板的位置应该从代码中传递一些数据
我知道通过在 Template.created 上从我的代码(使用 LAB.js
或其他)加载动态脚本来实现这一点,但这太过分了……
原文由 Guard 发布,翻译遵循 CC BY-SA 4.0 许可协议
<script>
主体或模板中的标签不会被 Meteor 执行,它们被 Meteor 的模板系统解析然后处理。您不能指望其中任何一个中的脚本标记都能像在普通 HTML 页面中那样工作。解决方案是使用模板事件(您可以在其中手动将脚本标记附加到正文或其他内容)或像您说的那样动态加载它。这并不过分,这就是 Meteor 的工作方式 - 请记住,没有传统的 HTML 页面或正文,只有 Meteor API,并且 Meteor API 指定为了加载和执行外部脚本,您必须使用适当的 API 方法。