2017-04-11 42 views
0

我正在创建一个使用video.js播放视频的rails应用程序。我还使用其他三个脚本来自定义页面上的播放器和活动。我的javascript导入按如下顺序排列:Javascript:Video.js直到硬刷新才加载

= javascript_include_tag "video.js" 
= javascript_include_tag "videojs-youtube.js", :defer => "defer" 
= javascript_include_tag "videojs-overlay.js", :defer => "defer" 
= javascript_include_tag "commentFeed.js", :defer => "defer" 

我的问题是VideoJS在第一次导航到页面时没有加载。因此,依赖于video.js脚本的三个附加脚本会引发一系列错误。直到一个硬刷新,一切都开始正常工作。

任何想法,为什么这是?我试图推迟后三个脚本,直到video.js加载,但似乎没有帮助。

如何确保脚本只有在加载完videojs后才能运行?

回答

0

更新:事实证明,问题与Rails如何使用Turbolink处理视图更改有关。

我的videojs对象没有被销毁,因为它应该是因为$(document).ready(...)在预期时没有被调用,因此在没有重新加载的情况下在另一个页面上不可用。

为了解决这个问题,我使用了andrkrn中的以下代码来侦听turbolinks加载事件并作出相应的响应。下面是我为它与Rails的5个工作变动:

change = -> 
    for player in document.getElementsByClassName 'video-js' 
     video = videojs('video_player') 
     console.log("Change, assigning video") 

before_load = -> 
    for player in document.getElementsByClassName 'video-js' 
     video = videojs('video_player') 
     video.dispose() 
     console.log("before_load, disposing of video") 

$(document).on('turbolinks:load', change) 
$(document).on('turbolinks:before-visit', before_load) 
2

我曾经面临过这样的问题,我用这个做videojs工作。

change = -> 
     for player in document.getElementsByClassName 'video-js' 
      video = videojs(player) 


    before_load = -> 
     for player in document.getElementsByClassName 'video-js' 
      video = videojs(player) 
      video.dispose() 


    $(document).on('turbolinks:load', change) 
    $(document).on('turbolinks:before-visit', before_load) 
相关问题