2014-06-06 27 views
0

我最近做了一个YouTube JukeBox。我有我想做的一切,除非我试图让通知在播放事件上工作/显示,只有在前一个视频已经结束的情况下。JavaScript通知功能不能正常工作

我试图设置一个变量,然后在视频结束为true时更新它,但是当我在play事件中检查它时,它会一直返回“undefined”。

function onPlayerStateChange(event) 
{ 
    var videoData = player.getVideoData(); 
    if (event.data == 0) 
    { 
     var videend = 1; 
     player.loadVideoById($("input[name=video]:radio:checked").closest('tr').next().find('input').prop("checked", true).val()); 
     $('.playlist').scrollTo($("input[name=video]:radio:checked").closest('tr')); 
    } 
    if (event.data == 1) 
    { 
     $("#info").css("display","none"); 
     if(videend == 1) 
     { 
      var videend = 0; 
      new Notification(videoData['author'], { 
       dir: "auto", 
       lang: "", 
       body: videoData['title'], 
       icon: "http://vman315.com/base/images/Pinkie-Pie-mustache.png", 
      }); 
     } 
    document.title = '\u25B6 ' + videoData['title']; 
    } 
} 

Example

如果还有人可能提供一些洞察我做错了,我会非常感激。

回答

0

我这来,我在谷歌浏览器版本工作29.0.1547.66米

看来好像在Chrome通知,自动运行受到限制,你必须去到Web浏览器并将它们设置为,允许来自所有网站的通知而不询问,或者每次都要求通知。

我的浏览器被设置为要求每次允许通知。但是,您的文档中没有任何代码要求获得运行通知的权限。当我设置我的浏览器运行通知没有问,然后它工作正常。

其他唯一的问题是你

"var videend = 1;" 

没有被本地函数内部访问。我把它移到了函数的内部,然后你的if语句开始工作。

http://jsfiddle.net/83tju/3/

有用资源

https://developer.mozilla.org/en-US/docs/Web/API/notification

http://www.w3.org/TR/notifications/#permission

阅读这些资源后,它看起来好像语法您使用的是创建通知的Chrome版本不工作,我正在使用,这可能可以解释为什么我不得不停止浏览器请求通知?不确定。我将不得不稍后在更新后的浏览器中查看。

+0

是的,但是这意味着每次调用'onPlayerStateChange'时都会将变量设置回1,这是每当玩家暂停/播放/缓冲/结束时。目标是只显示新的视频播放。我使用Aurora&IE8编写了所有这些测试。 – vman315

+0

JavaScript中的全局变量 - http://snook.ca/archives/javascript/global_variable 我更新了jsfiddle现在有一个全局变量,以便通知只在该歌曲的第一个播放中播放。 http://jsfiddle.net/83tju/4/ –

+0

我已经尝试过'window.videend',但它没有为我工作,但这个工程。我忘了将'Notification.requestPermission'添加到原始的JSFiddle中,这也许就是为什么它没有要求您的Chrome版本获得批准。 [最终结果](http://jsfiddle.net/83tju/8/),我加了'videonote.onshow = function(){setTimeout(function(){videonote.close()},5000);}'所以他们将在Chrome中关闭。 感谢您的帮助。我会赞成但没有足够的代表。 – vman315