我们正在使用adrianliaw:youtube-iframe-api
包在我们的项目中显示youtube iframe。
以前这很好,但是我们决定将项目的某些部分移到自己的程序包中。之后,我似乎无法将YT
和YTConfig
对象导入到我们的packge中。
这就是我所拥有的:package.js
:
Package.onUse(function(api) {
api.versionsFrom('METEOR@0.9.1.1');
// API Use - Both client and server
api.use([
'ecmascript',
'templating',
'fourseven:scss'
], ['client', 'server']);
// API Use - Client only
api.use([
'adrianliaw:youtube-iframe-api'
], ['client']);
});
youtube-display.js
:import { YT, YTConfig } from 'meteor/adrianliaw:youtube-iframe-api';
/**
* Video display controller
* Assuming youtube-only for now
*/
// 3. This function creates an <iframe> (and YouTube player)
// after the API code downloads.
var player,
videoId,
videoElement,
isPreview = false,
isMuted = false;
onYouTubeIframeAPIReady = function() {
player = new YT.Player(videoElement, {
height: window.innerHeight,
width: window.innerWidth,
videoId: videoId,
playerVars: {
controls: 0,
showinfo: 0,
modestbranding: 1,
iv_load_policy: 3,
rel: 0
},
events: {
onReady: function (event) {
if ( ! isPreview ) {
// Play video when player ready.
event.target.playVideo();
if ( isMuted ) {
event.target.mute();
}
}
}
}
});
}
Template.HBModule_youtube_Display.onCreated(function() {
videoId = Template.instance().data.media.youtubeId;
if ( Template.instance().data.preview ) {
isPreview = true;
}
if ( Template.instance().data.muted ) {
isMuted = true;
}
});
Template.HBModule_youtube_Display.onRendered(function() {
videoElement = Template.instance().$('.module__video')[0];
// Start
YT.load();
});
Template.HBModule_youtube_Display.onDestroyed(function() {
player.destroy()
});
我收到此错误:
_adrianliawYoutubeIframeApi.YT.load is not a function
。就像我说的,减去显示文件顶部的导入,这一切在以前都是完美的。
任何帮助,将不胜感激。谢谢!
最佳答案
诀窍是摆脱youtube-display.js
顶部的导入,并按照此SO答案将onYouTubeIframeAPIReady
函数更改为window.onYouTubeIframeAPIReady
:https://stackoverflow.com/a/16701359/5463842
编辑:哦!而且,像我一样,使用旧版本将@1.3.122
添加到软件包中。
关于javascript - 从YouTube Iframe API meteor 包导入YT和YTConfig,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38960760/