【问题标题】:JavaScript notifications not working as expected in functionJavaScript 通知在函数中未按预期工作
【发布时间】:2014-06-06 18:16:21
【问题描述】:

我最近制作了一个 YouTube JukeBox。我已经完成了我想做的所有事情,除了我试图让通知仅在上一个视频结束时才在播放事件上工作/显示。

我尝试设置一个变量,然后在视频结束为真时更新它,但是当我在播放事件中检查它时它一直返回“未定义”。

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

如果有人能提供一些关于我做错了什么的见解,我将非常感激。

【问题讨论】:

    标签: javascript html notifications youtube-iframe-api


    【解决方案1】:

    我在 Google Chrome 版本 29.0.1547.66 m 中为我工作

    Chrome 中的通知似乎被限制自动运行,您必须进入网络浏览器并将它们设置为:允许来自所有网站的通知而不询问,或者每次都要求通知。

    我的浏览器设置为每次都询问是否允许通知。但是,您的文档中没有任何代码来请求运行通知的权限。当我将浏览器设置为在不询问的情况下运行通知时,它可以正常工作。

    唯一的另一个问题是你的

    "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 版本,这可能解释了为什么我必须阻止浏览器请求通知?没有把握。稍后我将不得不在更新的浏览器上查看此内容。

    【讨论】:

    • 是的,但这意味着每次调用onPlayerStateChange(即每次播放器暂停/播放/缓冲/结束时)都会将变量设置回1。目标是仅在新的视频播放中显示。我使用 Aurora 和 IE8 编写了所有这些进行测试。
    • JavaScript 中的全局变量 -- snook.ca/archives/javascript/global_variable 我更新了 jsfiddle 现在有一个全局变量,这样通知只会在歌曲的第一次播放时播放。 jsfiddle.net/83tju/4
    • 我尝试过window.videend,但它对我不起作用,但它有效。我忘了在原始 JSFiddle 中添加 Notification.requestPermission,这可能是它没有在您的 Chrome 版本上要求权限的原因。 End results,我添加了videonote.onshow = function(){setTimeout(function(){videonote.close()}, 5000);},所以它们会在 Chrome 中关闭。谢谢您的帮助。我会投票但没有足够的代表。
    猜你喜欢
    • 2015-04-11
    • 1970-01-01
    • 2023-03-14
    • 2015-10-26
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    相关资源
    最近更新 更多