2014-06-06 51 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