47

コードのスニペットを提供するサービス(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に貼り付ければ機能します。Meteorではありません。

これが私が見るものです:

  • <script>テンプレート/本体の内部が読み込まれていません-リソースに表示されません。Meteorの何かが実際にブラウザがJSファイルとして認識できないようにしています
  • それはから動作します<head>

ここに問題と質問があります:

  1. 私はそれをロードしたくない<head>-スピードのために
  2. そこからロードしても、QA環境とPROD環境があります。異なるドメイン(service-domain-qa.comとservice-domain.comなど)からこのスクリプトを読み込む必要があります

そして驚くべきことに、でテンプレートヘルパー/変数を使用することはできません<head>

従来のフレームワークでは、それはまったく問題ではありません。スクリプトはどこにでも含めることができ、ロードするだけです。サーバーテンプレートの任意の部分でロジック/変数を使用できます。

では、Meteorでこれをどのように行う必要がありますか?繰り返します:

  • アプリページにロードする外部スクリプト(サードパーティドメインでホストされている)が必要です
  • このスクリプトをプロジェクトのフォルダに保存することはできません
  • スクリプトパスは環境によって異なります(すでに設定システムがあります)。そのため、スクリプトをレンダリングするテンプレートの場所には、コードからデータを渡す必要があります。

Template.createdのコードから(LAB.jsなどを使用して)動的なスクリプトをロードすることでこれを実現する方法を知っていますが、これはやり過ぎです...

4

7 に答える 7

25

<script>本文またはテンプレート内のタグはMeteorによって実行されず、解析されてからMeteorのテンプレートシステムによって処理されます。どちらのスクリプトタグも、通常のHTMLページの場合と同じように機能することは期待できません。

解決策は、テンプレートイベント(スクリプトタグを本文などに手動で追加できる場合)を使用するか、前述のように動的にロードすることです。それはやり過ぎではなく、Meteorの仕組みです。従来のHTMLページや本文はなく、Meteor APIだけがあり、Meteor APIは、外部スクリプトをロードして実行するために、適切なAPIメソッドを使用する必要があることを指定しています。

于 2013-01-17T23:10:26.463 に答える
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>
于 2013-07-06T19:27:16.533 に答える
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')
  });
});
于 2013-11-06T18:49:30.910 に答える
8

jQueryのgetscriptを使用してみませんか?

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

コールバック関数を追加できます

于 2014-01-06T08:13:34.910 に答える
3

yepnopeのようなものを使用 して、スクリプトを非同期でロードできます。これを使用して、必要に応じてリーフレットをロードします。私はyepnopeを介してより多くのスクリプトをロードすることに移行し始めているので、私のアプリケーションは最初のページロードで最低限をレンダリングします。Template.created内にyepnopeのものを配置します。

于 2013-02-14T01:48:26.230 に答える
2

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アドワーズコードを含む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>

それは理想からは程遠いですが、それはページ上のコードを取得するために機能しました(一つには、それはグーグルの利用規約に違反していると思います)。

于 2013-05-20T19:07:09.297 に答える
1

METEOR1.0を使用しています。レイアウトテンプレートのタグの直前にあるDIV要素内にすべての外部SCRIPTタグを配置しました。Meteorは問題なくそれらを認識し、ブラウザによってロードされます。

于 2014-12-31T16:25:09.237 に答える