使用带外部JS的Brightcove播放器

时间:2014-08-25 17:29:03

标签: javascript coffeescript brightcove

我有时间让brightcove Smart Player API处理任何外部JS文件。我在调用onTemplateLoad中的onTemplateReadyindex.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?&amp;width=480&amp;height=270&amp;flashID=myExperience&amp;bgcolor=%23FFFFFF&amp;playerID=1507808033001&amp;playerKey=AQ~~%2CAAABXxBZKsE~%2CAdU2xXeQoKCatdLR1Pb_eo4UzCFcjSKc&amp;isVid=true&amp;isUI=true&amp;dynamicStreaming=true&amp;%40videoPlayer=2114345471001&amp;includeAPI=true&amp;templateLoadHandler=onTemplateLoad&amp;templateReadyHandler=brightcove%5B%22templateReadyHandlermyExperience%22%5D&amp;autoStart=&amp;debuggerID=&amp;originalTemplateReadyHandler=onTemplateReady&amp;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">

理论上,应该调用onTemplateReadyonTemplateLoad函数:

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粉丝。

谢谢,

詹姆斯

1 个答案:

答案 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) -> ...