Javascript: Video.js 直到硬刷新才加载
Javascript: Video.js not loading until hard refresh
我正在创建一个使用 video.js 播放视频的 rails 应用程序。我还使用其他三个脚本来自定义播放器和页面上的 activity。我的 javascript 导入是这样排序的:
= 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 后才按顺序排列?
Update:原来问题与Rails如何使用Turbolinks处理视图变化有关。
我的 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)
我遇到过这个问题,我用它来使 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)
我正在创建一个使用 video.js 播放视频的 rails 应用程序。我还使用其他三个脚本来自定义播放器和页面上的 activity。我的 javascript 导入是这样排序的:
= 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 后才按顺序排列?
Update:原来问题与Rails如何使用Turbolinks处理视图变化有关。
我的 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)
我遇到过这个问题,我用它来使 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)