为什么这不会被解雇?

时间:2013-08-25 15:37:56

标签: javascript jquery

我试着按一下按钮开始在播放器上播放视频 如果我按下控制栏上的“播放”,播放器就会显示并正常工作 但我的a href link开始播放是行不通的 play()不会被解雇。为什么呢?

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

    function play() {
  if (ytplayer) {
    ytplayer.playVideo();
  }
}
</script>

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

  <script type="text/javascript">

    var params = { allowScriptAccess: "always" };
    var atts = { id: "myytplayer" };
    swfobject.embedSWF("http://www.youtube.com/v/P5_GlAOCHyE?enablejsapi=1&playerapiid=ytplayer", 
                       "ytapiplayer", "425", "356", "8", null, null, params, atts);

  </script>

  <a href="javascript:void(0);" onclick="play();">Play</a>

2 个答案:

答案 0 :(得分:0)

与Flash对象交谈可能很困难。这是我用来发送消息的代码:

function runFlashFunction( flashName, funcName ) {
    var
    od = document[flashName],
    ow = window[flashName];
    // flash isn't happy with o=func;o(); syntax
    try {
        if( od && !!(od[funcName]) ) {
            return document[flashName][funcName]( );
        }
        if( ow && !!(ow[funcName]) ) {
            return window[flashName][funcName]( );
        }
        if( ow && ow.length && !!(ow[0]) && !!(ow[0][funcName]) ) {
            return window[flashName][0][funcName]( );
        }
        return void 0;
    } catch( ex ) {
        return void 0;
    }
}

为什么这样?因为某些浏览器使用不同的方式来访问Flash内容。可能不需要最后一个,但我确定包括它。

此外,您的链接使用不推荐的样式。这样更好:

<a href="#" onclick="play();return false">Play</a>

甚至更好:在JavaScript中分配回调,而不是HTML:

$(function(){
    $('#playLink').click(function(){ // name the link playLink (or whatever)
        play();
        return false;
    });
});

答案 1 :(得分:0)

尽量不要使用全局变量

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

function play() {
  if (ytplayer) {
    ytplayer.playVideo();
  }
}