我有时间让brightcove Smart Player API处理任何外部JS文件。我在调用onTemplateLoad
中的onTemplateReady
和index.html
等标准API方法时没有任何问题,但只要它们移出外部coffeescript,我什么都得不到:(所有的API BrightCove的文档使用内部javascript。
BrightCoveExperiences.js
包含在HTML正文中,紧挨着播放器div
。
我的JS加载顺序因此(在Jade中),beast.js
就是货物:
script(type="text/javascript", src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js")
script(type="text/javascript", src="js/contentful.min.js")
script(type="text/javascript", src="js/handlebars.js")
script(type="text/javascript", src="js/showdown.js")
script(type="text/javascript", src="js/moment.js")
script(src="js/beast.js", type="text/javascript")
在beast.js
内,我正在注入以下内容:
<object type="application/x-shockwave-flash" data="http://c.brightcove.com/services/viewer/federated_f9?&width=480&height=270&flashID=myExperience&bgcolor=%23FFFFFF&playerID=1507808033001&playerKey=AQ~~%2CAAABXxBZKsE~%2CAdU2xXeQoKCatdLR1Pb_eo4UzCFcjSKc&isVid=true&isUI=true&dynamicStreaming=true&%40videoPlayer=2114345471001&includeAPI=true&templateLoadHandler=onTemplateLoad&templateReadyHandler=brightcove%5B%22templateReadyHandlermyExperience%22%5D&autoStart=&debuggerID=&originalTemplateReadyHandler=onTemplateReady&startTime=1408987173053" id="myExperience" width="480" height="270" class="BrightcoveExperience" seamlesstabbing="undefined">
<param name="allowScriptAccess" value="always">
<param name="allowFullScreen" value="true">
<param name="seamlessTabbing" value="false">
<param name="swliveconnect" value="true">
<param name="wmode" value="window"><param name="quality" value="high">
<param name="bgcolor" value="#FFFFFF">
理论上,应该调用onTemplateReady
和onTemplateLoad
函数:
onTemplateLoad = (experienceID) ->
player = brightcove.api.getExperience(experienceID)
APIModules = brightcove.api.modules.APIModules
console.log 'im so loaded man'
onTemplateReady = (evt) ->
videoPlayer = player.getModule(APIModules.VIDEO_PLAYER)
videoPlayer.play()
console.log 'ready'
但是唉...我还应该提一下,我不是BrightCove粉丝。
谢谢,
詹姆斯
答案 0 :(得分:2)
CoffeeScript将编译好的JavaScript包装在self-invoking function中,以避免污染全局命名空间:
虽然为了清楚起见在本文档中进行了限制,但所有CoffeeScript输出都包含在一个匿名函数中:
(function(){ ... })();
此安全包装器与自动生成var
关键字相结合,使得污染非常困难意外的全局命名空间。
这意味着你的两个功能
onTemplateLoad = (experienceID) -> ...
onTemplateReady = (evt) -> ...
不是全球可用的,它们是这样隐藏的:
(function() {
var onTemplateLoad = function(experienceId) { ... };
var onTemplateReady = function(evt) { ... };
})();
您需要手动将它们放在全局范围内:
window.onTemplateLoad = (experienceID) -> ...
window.onTemplateReady = (evt) -> ...
或者,如果您确定它们位于.coffee
文件中的最高级别:
@onTemplateLoad = (experienceID) -> ...
@onTemplateReady = (evt) -> ...