【问题标题】:How to reload external JavaScript library without reloading page如何在不重新加载页面的情况下重新加载外部 JavaScript 库
【发布时间】:2017-07-26 05:18:25
【问题描述】:

我在项目的head 中包含了viostream api js 库,所以我可以在js 文件中使用对象viostreamPlayer

<head>
  ...
  <script src='https://publish.viostream.com/embed/api'></script>
</head>

我需要在 js 中调用 embed 函数两次,并且无需重新加载页面。但是,第二次使用viostreamPlayer会出现一些问题。

因此,我想在第二次使用之前重新加载 api 库。确保viostreamPlayer 对象新鲜且可以使用。


更多详情:

我使用backbone.js在页面中加载视频视图,通过js加载另一个视频视图后,我应该更新视频内容。这就是为什么我需要调用embed 函数两次,即加载另一个视频。新视频已成功嵌入,但所有事件处理程序均失败。 js加载页面无法重新加载head

事件处理程序是通过调用on方法和viostreamPlayer来添加的:

viostreamPlayer.on('play', function(){})

但是当我嵌入第二个视频时,它就失效了。这就是为什么我要在调用embed 函数之前寻找确保viostreamPlayer 新鲜的方法。

文档:https://help.viostream.com/hc/en-us/articles/223291607-Embedding-and-using-the-Player-API

干杯

更新

ViostreamPlayer 已更新 api,因此该错误不再存在。

【问题讨论】:

  • "但是,第二次使用 viostreamPlayer 会出现一些问题。"。究竟是什么问题?
  • 嗨@CharlieFish,我在More details中解释过,问题是所有的事件监听器都无法正确设置而无法正常工作
  • 您是否尝试过联系他们的支持?看起来像付费产品。他们应该提供支持。我不确定你为什么需要重新加载脚本。听起来更像是他们脚本中的问题。
  • @CharlieFish,是的,这是另一种选择,它已经在联系中,但我仍在努力寻找任何可能的解决方案。
  • 是的,我不确定。我可能是错的,但在他们的剧本中听起来确实是个问题。

标签: javascript jquery backbone.js


【解决方案1】:

如果你使用 jQuery,你可以使用$.getScript() 重新加载。

例子:

setTimeout(() => {
    $.getScript("https://publish.viostream.com/embed/api?1")
        .done(function (script, textStatus) {
            console.log(textStatus);
        })
        .fail(function (jqxhr, settings, exception) {
            console.log.("Triggered ajaxError handler.");
        });
}, 1000);

【讨论】:

  • 感谢您的回答@Arunesh Saxena。但是,我发现getScript 函数无法重新加载脚本。比如这个js会包含一个对象viostreamPlayer,并在getScript方法之前添加一个delete viostreamPlayer,你可以看到它不会再创建对象了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-02
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 2017-08-13
  • 2010-12-22
  • 1970-01-01
相关资源
最近更新 更多