Meteor JS:使用外部脚本

Gua*_*ard 47 javascript meteor

有一些服务(如FB like或AddThis)提供了一段代码.看起来像

<div class="service-name" data-something="x"></div>
<script type="text/javascript" src="http://service-domain.com/service-name.js"></script>
Run Code Online (Sandbox Code Playgroud)

好的,很酷,所以通常你把它粘贴到你的HTML上就行了.不是流星.

这是我看到的:

  • <script>模板/正文内部没有加载 - 我没有在参考资料中看到它,Meteor中的某些东西实际上是阻止浏览器将其识别为JS文件
  • 它起作用 <head>

现在这里是问题和疑问:

  1. 我不想加载它<head>- 因为速度
  2. 即使我从那里加载它 - 我们有QA和PROD环境.他们必须从不同的域加载此脚本(例如service-domain-qa.com与service-domain.com)

而且令人惊讶的是你不能在中使用模板助手/变量<head>.

对于传统的框架,它根本不是一个问题 - 您可以在任何地方包含脚本,只需加载它们; 您可以在服务器模板的任何部分使用逻辑/变量.

那么,我应该如何在Meteor中做到这一点?让我再说一遍:

  • 我需要将一些外部脚本(托管在第三方域上)加载到我的应用页面中
  • 将此脚本保存到项目的文件夹中不是一个选项
  • 脚本路径取决于环境(我们已经有设置系统),因此呈现它的模板的位置应该从代码中传递一些数据

我知道使用Template.created上的代码(使用LAB.js或其他)加载动态脚本来实现此目的的方法,但这太过分了......

Rah*_*hul 25

<script>Meteor不会执行正文或模板中的标记,它们会被解析,然后由Meteor的模板系统处理.您不能指望其中任何一个中的脚本标记与普通HTML页面一样工作.

解决方案是使用模板事件(您可以手动将脚本标记附加到正文或其他内容)或者像您所说的那样动态加载它.这不是矫枉过正,这是Meteor的工作原理 - 记住,没有传统的HTML页面或正文,只有Meteor API,而Meteor API指定为了加载和执行外部脚本,您必须使用适当的API方法.

  • 在一天结束时,它是浏览器中的HTML.它是如此奇怪,插入页面的脚本标签不是*只是工作*.什么更陌生 - 你们认为没关系:) (35认同)
  • 因为有一个很好的理由 - Meteor完全为您管理DOM,并且可能根据反应性重新插入元素或移动物体.因此,只需将脚本放在体内并期望它能够正常工作就没有意义; 如果模板重新渲染,它会被重新执行并弄乱一切.这就是为什么你可以把它放在头脑中,它将以这种方式工作.或者,Meteor提供了我在答案中描述的替代方案.由您自己选择这两个选项. (22认同)
  • Template.name.rendered有一个示例可以手动追加脚本标记吗? (15认同)
  • 我不明白为什么meteor不会发出关于未执行的标签的警告. (9认同)

小智 25

我的解决方案是使用包.有关详细信息,请参阅https://github.com/meteor/meteor/tree/master/packages/spiderable.

Package.describe({
  summary: "External script"
});

Package.on_use(function (api) {
  api.use(['templating'], 'client');

  api.add_files('external_script.html', 'client');
});



<head><script type="text/javascript" src=""//mc.yandex.ru/metrika/watch.js""></script></head>
Run Code Online (Sandbox Code Playgroud)


Kub*_*bek 11

如果您正在使用IronRouter,则可以使用此软件包加载外部scipt:https: //github.com/DerMambo/wait-on-lib

Router.map( function () {
  this.route('codeEditor',{
    waitOn: IRLibLoader.load('https://some-external.com/javascript.js')
  });
});
Run Code Online (Sandbox Code Playgroud)


Run*_*sen 8

为什么不使用jQuery的getscript?

http://api.jquery.com/jquery.getscript/

您可以添加回调函数