javascript - meteor - swfobject.js + YouTube API

标签 javascript youtube meteor swfobject

我很难弄清楚如何让这个(正常运行的)客户端 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>

尝试通过 DOM 注入(inject)(此 html/javascript)加载脚本不起作用,swfobject 脚本似乎无法从本地和远程主机加载。

将脚本 (swfobject.js) 添加到我的项目根目录(排行榜示例)会在启动应用程序时(在终端输出内)导致“ReferenceError:未定义窗口”。

此代码在普通 HTML 页面内的客户端正常工作以加载脚本。

我找到了 library在一个古老的(2009 年) repo 中,它在启动时没有崩溃,但随后弹出了“swfobject”未找到错误。

关于解决方法的任何想法?将此代码放入模板事件中也不起作用;加载 swfobject 似乎总是问题所在。

最佳答案

通过将 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 以便可以在全局范围内访问它。我假设这是由脚本自动运行的?我没有在您的代码中看到对它的引用。

关于javascript - meteor - swfobject.js + YouTube API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15957581/

相关文章:

javascript - 在 Wordpress 解决方案中自定义 YouTube 缩略图并仍然计算观看次数?

php - PHP:Youtube最新的视频提要php代码机制

Meteor 移动应用程序为 Google OAuth 提供了 redirect_uri_mismatch,如何修复帐户 URL?

mongodb - 交易电子邮件和 Meteor

php - 使用 Ajax 将 JSON 发送到服务器端

javascript - 如何将嵌入的 YouTube 视频静音?音量 = 0 不起作用

javascript - 当我使用 equalHeights jQuery 插件时,IE8 返回 “object doesn' t support this property or method”

meteor - 如何使用 Meteor 实现 PeerJS 服务器?

javascript - 不使用 jquery 函数对性能有何影响?

javascript - Angular 2 ngFor 值(数字)总结