Meteor JS:使用外部脚本

时间:2013-01-17 23:02:56

标签: 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>

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

这就是我所看到的:

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

现在这里是问题和疑问:

  1. 我不想从<head>加载它 - 因为速度
  2. 即使我从那里加载它 - 我们有QA和PROD环境。他们必须从不同的域加载此脚本(例如service-domain-qa.com与service-domain.com)
  3. 令人惊讶的是,无法<head>中使用模板助手/变量。

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

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

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

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

7 个答案:

答案 0 :(得分:25)

主体或模板中的

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

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

答案 1 :(得分:24)

我的解决方案是使用包。有关详细信息,请参阅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>

答案 2 :(得分:11)

如果您使用的是Iron Router,则可以使用此软件包加载外部脚本: https://github.com/DerMambo/wait-on-lib

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

答案 3 :(得分:8)

为什么不使用jQuery的getscript?

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

您可以添加回调函数

答案 4 :(得分:3)

您可以使用类似yepnope的内容来异步加载脚本。我用这个来装载传单,当我需要时。我开始转移到通过yepnope加载更多脚本,以便我的应用程序在初始页面加载时呈现最低限度。我将yepnope的东西放在Template.created。

答案 5 :(得分:2)

使用iframe和公共目录是一个黑客,我曾经使用嵌入的脚本代码。在这里它是谷歌adwords代码,我做了这个我的主要HTML模板:

<iframe src="/gads.html?v={{{unique}}}" seamless width="160" height="600"
 scrolling="no" frameborder="0" marginheight="0" marginwidth="0"
 style="margin:0;padding:0;border:none;width:160px;height:600px"></iframe>

然后在公共目录中输入带有我的Google adwords代码的gads.html文件,如下所示:

<html>
<head>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<div>
<script type="text/javascript"><!--
google_ad_client = "ca-pub-54*********";
google_ad_slot = "66******";
google_ad_width = 160;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
</body>
</html>

这有助于在页面上获取代码,虽然它远非理想(一方面,我认为它违反了谷歌的服务条款)。

答案 6 :(得分:1)

我正在使用METEOR 1.0。我已将所有外部SCRIPT标记放在布局模板中标记之前的DIV元素中。 Meteor没有任何问题地识别它们,它们由浏览器加载。

相关问题