0

我很难弄清楚如何让这个(正常运行的)客户端 js 代码在流星中工作(在屏幕上输入元素的模板事件期间拉出 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 注入(此 html/javascript)加载脚本不起作用,swfobject 脚本似乎无法从本地和远程主机加载。

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

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

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

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

4

2 回答 2

0

通过将 swfobject.js 放在根目录中,它也会在没有 a 的服务器上进行解析,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 回答
0

自从提出这个问题以来已经有一段时间了,但我相信像我这样的其他人会偶然发现这个问题。这些只是我的笔记。

我让 swfobject 在我的项目中工作(以支持剪贴板复制)的方式是<script>直接在 HTML iron-router 模板中添加代码。

<template name="writeApp"> <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script> ...

在我的 .js 代码中,我使用我的 template.rendered 函数来设置一个全局可用的会话变量,称为 hasFlash:

Template.writeApp.rendered = function() { Session.set('hasFlash', (swfobject.hasFlashPlayerVersion('1') && true)); }

每次页面呈现时,我现在都可以查看用户现在是否拥有 Flash。在需要显示“错误:无闪烁”消息的页面上,我有一个辅助函数:

Template.writeApp.helpers({ hasFlash: function() { return Session.get('hasFlash'); } });

在 HTML 中,我可以使用 hasFlash 帮助函数来显示正确的消息:

{{#if hasFlash}}Copy to Clipboard {{else}} Needs Flash to Copy {{/if}}

希望这可以帮助任何偶然发现这个问题的人

于 2014-08-01T17:51:10.690 回答