有些服务(如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>
未加载<head>
现在这里是问题和疑问:
<head>
加载它 - 因为速度令人惊讶的是,无法在<head>
中使用模板助手/变量。
使用传统框架根本不是一个问题 - 您可以在任何地方包含脚本,只需加载;您可以在 server 模板的任何部分使用逻辑/变量。
那么,我应该如何在Meteor中做到这一点? 让我再说一遍:
我知道使用Template.created上的代码(使用LAB.js或其他)加载动态脚本来实现此目的的方法,但这太过分了......
答案 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)
答案 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没有任何问题地识别它们,它们由浏览器加载。