gpt4 book ai didi

javascript - 当我也使用 RequireJS 时如何使用 videojs 插件

转载 作者:数据小太阳 更新时间:2023-10-29 06:10:46 26 4
gpt4 key购买 nike

我在一个网站上工作,其中包含一些我无法控制的 JS 代码。该代码使用 RequireJS 来加载依赖项和所有内容。

免责声明:我是 RequireJS 菜鸟。我了解基础知识,但仅此而已...

在我的网站中,我需要使用 VideoJS。 VideoJS 可以使用或不使用 RequireJS,但据我了解,如果页面中某处使用了 RequireJS,则没有它我无法使用 VideoJS。

所以我像这样用 RequireJS 加载 VideoJS:

var MyRequire = requirejs.config({
baseUrl: '/_/js',
paths: {
videojs: 'http://vjs.zencdn.net/5.3.0/video'
}
});
MyRequire(["videojs"], function(videojs) {
videojs('myPlayer', {}, function(){
console.log('...');
});
});

它正在运行。

但我想使用 VideoJS 插件来管理前置广告。 ( https://github.com/dirkjanm/videojs-preroll )

我尝试将插件脚本包含在 RequireJS 中,该脚本已包含在内,但是当插件尝试访问 videojs 对象时,我收到一条错误消息,提示我未定义 videojs。

我的猜测是,当我将 VideoJS 作为 RequireJS 模块加载时,它不在全局范围内,我正在使用的插件正在全局范围内寻找 VideoJS,这就是我收到该错误的原因。

有什么方法可以在不将 VideoJS 作为 RequireJS 模块加载的情况下使用它吗?或者如何帮助插件找到 VideoJS 对象?

感谢您的帮助!

最佳答案

你应该使用 shim从 requirejs 并将 videojs 注入(inject)全局范围。我为您的案例制作了一个代码示例。我测试了它并且它有效(你可以看到下面的图片):

加载顺序:

  1. “视频”
  2. “在全局范围内添加视频 js”
  3. “ads”(此时 videojs var 已经在 window 对象中)
  4. “预卷”

Requirejs分析顺序:

  1. requirejs(["preroll", "ads"] - 入口点
  2. “preroll” - 需要“广告”
  3. “广告”- 需要“add-video-js-in-global-scope”
  4. “add-video-js-in-global-scope”- 需要“videojs”并在窗口对象中添加 videojs var。

应用程序.js

requirejs.config({
paths: {
"videojs": "./libs/video",
"ads": "./libs/videojs.ads",
"preroll": "./libs/videojs-preroll"
},
shim:{
"preroll": {
deps: ['ads']
},
"ads": {
deps: ["add-video-js-in-global-scope"],
}
}
});

define("add-video-js-in-global-scope",["videojs"], function(videojs) {
window.videojs = videojs;
});

requirejs(["preroll", "ads"], function (preroll,ads) {
// preroll and ads will be undefined because it's not amd.
videojs('idOne', {}, function () {
var player = this;
player.ads(); // initialize the ad framework
// your custom ad integration code
});
});

index.html

<html>
<head>
</head>
<body>
<script data-main="app.js" src="//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.22/require.js"></script>
<div id="idOne"></div>
</body>
</html>

result:

files:

关于javascript - 当我也使用 RequireJS 时如何使用 videojs 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34163777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com