Il existe certains services (comme FB like ou AddThis) qui fournissent un extrait de code. On dirait
<div class="service-name" data-something="x"></div>
<script type="text/javascript" src="http://service-domain.com/service-name.js"></script>
OK, cool, donc normalement vous le collez dans votre code HTML et cela fonctionne. Pas avec Meteor.
Voici ce que je vois:
<script>
à l'intérieur du modèle/corps ne se charge pas - Je ne le vois pas dans les ressources, quelque chose dans Meteor empêche en fait le navigateur de le reconnaître comme un fichier JS<head>
Voici maintenant les problèmes et les questions:
<head>
- à cause de la vitesseEt étonnamment, vous ne pouvez pas utiliser des assistants/variables de modèle dans le <head>
.
Avec les frameworks traditionnels, ce n'est pas du tout une question - vous pouvez inclure des scripts n'importe où et ils se chargent simplement; vous pouvez utiliser la logique/les variables dans n'importe quelle partie de vous modèles de serveur .
Alors, comment dois-je faire cela dans Meteor? Permettez-moi de répéter:
Je connais le moyen d'y parvenir avec le chargement de script dynamique à partir de mon code (avec LAB.js ou autre) sur Template.created, mais c'est tellement exagéré ...
<script>
les balises dans le corps ou les modèles ne sont pas exécutées par Meteor, elles sont analysées puis gérées par le système de modèles de Meteor. Vous ne pouvez pas vous attendre à ce qu'une balise de script dans l'une d'elles fonctionne comme elle le ferait avec une page HTML normale.
La solution consiste à utiliser des événements de modèle (où vous pouvez ajouter manuellement la balise de script au corps ou à quelque chose) ou à le charger dynamiquement comme vous l'avez dit. Ce n'est pas exagéré, c'est comment Meteor fonctionne - rappelez-vous, il n'y a pas de page ou de corps HTML traditionnel, il n'y a que l'API Meteor, et l'API Meteor spécifie que pour charger et exécuter des scripts externes, vous devez utiliser les méthodes d'API appropriées.
Ma solution est d'utiliser des packages. Voir https://github.com/meteor/meteor/tree/master/packages/spiderable pour plus de détails.
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>
Si vous utilisez IronRouter, vous pouvez charger un scipt externe en utilisant ce package: https://github.com/DerMambo/wait-on-lib
Router.map( function () {
this.route('codeEditor',{
waitOn: IRLibLoader.load('https://some-external.com/javascript.js')
});
});
Pourquoi ne pas utiliser le script de jQuery?
http://api.jquery.com/jquery.getscript/
Vous pouvez ajouter une fonction de rappel
Vous pouvez utiliser quelque chose comme yepnope pour charger le script de manière asynchrone. Je l'utilise pour charger la brochure au fur et à mesure de mes besoins. Je commence à charger plus de scripts via yepnope, afin que mon application affiche le strict minimum lors du chargement initial de la page. Je place le truc yepnope dans Template.created.
Utiliser iframe et le répertoire public était un hack que j'ai utilisé pour intégrer le code du script. Dans ce cas, c'était pour le code google adwords et j'ai fait cela mon principal modèle 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>
puis dans le répertoire public, mettez un fichier gads.html avec mon code google adwords, comme ceci:
<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>
cela a fonctionné pour obtenir le code sur la page, bien qu'il soit loin d'être idéal (d'une part, je pense que cela viole les conditions d'utilisation de google).
J'utilise METEOR 1.0. J'ai placé toutes les balises SCRIPT externes dans un élément DIV juste avant la balise dans le modèle de mise en page. Meteor les reconnaît sans aucun problème et ils sont chargés par le navigateur.