コードのスニペットを提供するいくつかのサービス(FB likeやAddThisなど)があります。のように見える
<div class="service-name" data-something="x"></div>
<script type="text/javascript" src="http://service-domain.com/service-name.js"></script>
OK、クールです。通常はHTMLに貼り付けて機能します。流星ではありません。
ここに私が見るものがあります:
<script>
テンプレート/ボディの内部ロードされていません-リソースに表示されません。Meteorの何かが実際にブラウザがJSファイルとして認識できないようにしている<head>
から機能します次に、問題と質問を示します。
<head>
からロードしたくない-速度が理由でそして驚くべきことにcannot<head>
でテンプレートヘルパー/変数を使用します。
従来のフレームワークでは、それはまったく問題ではありません。スクリプトはどこにでも含めることができ、ロードするだけです。あなたの任意の部分でロジック/変数を使用できますserverテンプレート。
それでは、Meteorでこれをどのように行うべきですか?繰り返しましょう:
Template.createdのコード(LAB.jsまたは何でも)から動的スクリプトをロードすることでこれを達成する方法を知っていますが、これは非常にやり過ぎです...
<script>
本文またはテンプレート内のタグは、Meteorによって実行されるのではなく、解析され、Meteorのテンプレートシステムによって処理されます。どちらのスクリプトタグも、通常のHTMLページのように機能することを期待することはできません。
解決策は、テンプレートイベント(本文または何かに手動でscriptタグを追加できる場所)を使用するか、前述のように動的に読み込むことです。やり過ぎではありません。Meteorの仕組みです。従来のHTMLページや本文はなく、Meteor APIのみがあります。MeteorAPIは、外部スクリプトをロードして実行するには適切なAPIメソッドを使用する必要があることを指定します。
私の解決策は、パッケージを使用することです。詳細については、 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>
IronRouterを使用している場合、このパッケージを使用して外部sciptをロードできます。 https://github.com/DerMambo/wait-on-lib
Router.map( function () {
this.route('codeEditor',{
waitOn: IRLibLoader.load('https://some-external.com/javascript.js')
});
});
yepnope のようなものを使用して、スクリプトを非同期にロードできます。これを使用して、必要なときにリーフレットをロードします。私は、yepnopeを介してより多くのスクリプトをロードすることに移行し始めているので、アプリケーションは最初のページのロードで最小限のレンダリングを行います。 yepnopeをTemplate.created内に配置します。
Iframeとパブリックディレクトリを使用することは、スクリプトコードを埋め込むために使用したハックでした。これでグーグルアドワーズ広告コード用であり、私はこれを私のメインの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>
それはページ上のコードを取得するために機能しましたが、それは理想からはほど遠いです(1つには、Googleの利用規約に違反していると思います)。
METEOR 1.0を使用しています。すべての外部SCRIPTタグを、レイアウトテンプレートのタグの直前にあるDIV要素内に配置しました。 Meteorは問題なくそれらを認識し、ブラウザによってロードされます。