0

この (機能している) クライアント側の js コードを meteor 内で動作させる方法を理解するのに苦労しています (theVideo 変数は、画面上の入力要素のテンプレート イベント中に引き出されます)。

 <script type="text/javascript" src="swfobject/swfobject.js"></script>    
  <div id="ytapiplayer">
      You need Flash player 8+ and JavaScript enabled to view this video.
 </div>
<script type="text/javascript">
  theVideo = 'tAbCgr6jJ_0';

  if(theVideo != 'null'){
        var params = { allowScriptAccess: "always" };
        var atts = { id: "myytplayer" };
        swfobject.embedSWF("http://www.youtube.com/v/"+theVideo+"?enablejsapi=1&playerapiid=ytplayer&version=3",
        "ytapiplayer", "325", "256", "8", null, null, params, atts);
  }

  function onYouTubePlayerReady(playerId) {
      ytplayer = document.getElementById("myytplayer");
      ytplayer.playVideo();
    }
 </script>

(この html/javascript の) DOM インジェクションによってスクリプトをロードしようとしても機能しません。swfobject スクリプトは、ローカル ホストとリモート ホストの両方からロードされないようです。

スクリプト (swfobject.js) をプロジェクト ルート (リーダーボードの例) に追加すると、アプリの起動時 (ターミナル出力内) に「ReferenceError: ウィンドウが定義されていません」が発生します。

このコードは、通常の HTML ページ内のクライアント側で正常に動作し、スクリプトをロードします。

古い (2009) リポジトリで、起動時にクラッシュしないライブラリを見つけましたが、'swfobject' not found エラーがポップアップ表示されました。

回避策に関するアイデアはありますか? このコードをテンプレート イベント内に配置しても機能しませんでした。swfobject のロードが常に問題のようです。

4

2 に答える 2

0

swfobject.js をルート ディレクトリに配置すると、swfobject.js がないサーバーでも解析されるwindowため、エラーが返されます。

移動する場合/client/lib(コメントの下のコードの最初の行の最初も削除しvarます。そうしないと、ブラウザー ウィンドウにスコープされません。

次に、ファイルを手動で参照する必要はありません。次のような HTML を使用できます。

<template name="video">
    <div id="ytapiplayer">
    You need Flash player 8+ and JavaScript enabled to view this video.
    </div>
</template>

そしていくつかの(クライアント側)js:

 Template.video.rendered = function() {
     played = false; //prevent double plays on multiple renders
     theVideo = 'tAbCgr6jJ_0';
     if(theVideo != 'null' && !played){
         played = true
         var params = { allowScriptAccess: "always" };
         var atts = { id: "myytplayer" };
         swfobject.embedSWF("http://www.youtube.com/v/"+theVideo+"?enablejsapi=1&playerapiid=ytplayer&version=3",
    "ytapiplayer", "325", "256", "8", null, null, params, atts);

 }

 onYouTubePlayerReady = function  (playerId) {
    var ytplayer = document.getElementById("myytplayer");
    ytplayer.playVideo();
 }

グローバルにアクセスできるように onYouTubePlayerReady を再フォーマットしました。これはスクリプトによって自動的に実行されると思いますか? あなたのコードにそれへの参照がありませんでした。

于 2013-04-12T06:38:32.850 に答える