VPAID可以是js或swf。
如果我有js,那么一切都很简单,我只需要这样做:
var script = document.createElement('script');
script.onload = onLoad;
script.src = "https://somedomain.net/vpaid.js";
document.getElementsByTagName('head')[0].appendChild(script);当加载JS文件时,调用onLoad。
function onLoad() {
var adUnit = getVPAIDAd();
}现在我有了一个adUnit,它有一些API:
adUnit.initAd
adUnit.handshakeVersion
...以及另一种控制ad的方法。
但如果我有swf,我就不知道该怎么做了。
我有URL:
https://somedomain.net/vpaid.swf我可以使用swfobject创建对象:
swfobject.embedSWF(
"https://somedomain.net/vpaid.swf",
"myContent", "640", "480", "9.0.0"
);但是我不知道怎样才能得到AdUnit。我想要从这个swf中获取AdUnit,并且希望这个AdUnit具有相同的接口:
adUnit.initAd
adUnit.handshakeVersion
...但我不知道该怎么做:(.
发布于 2016-10-22 21:56:16
你需要实现你自己的AS3/Flash播放器来做到这一点。
播放器将通过flash.external.ExternalInterface接收VPAID资源url,或者您将整个解析后的数据交给flash播放器(我更喜欢)。
AS3示例:
/**
* Setup listeners
*/
private function setup():void {
ExternalInterface.addCallback("player_load", load);
ExternalInterface.addCallback("player_exec", execute);
}
/**
* Hand over VAST
*/
private function load(data:*):void {
try {
var result:* = _internalPlayer.load(new VAST(data.vast));
callExternal(data.callback, result);
} catch(e.*) {
callExternal(data.callback, e);
}
}
/**
* Implement something to control the player from JS via ExternalInterface
*/
private function execute(data:*):* {
try {
var result:* = new Command(data.command).execute();
callExternal(data.callback, result);
} catch(e.*) {
callExternal(data.callback, e);
}
}
private function callExternal(target:String, args:*):void {
if(ExternalInterface.available)
ExternalInterface.call(target, args);
else
trace('ExternalInterface unavailable');
}JS示例:
embedded_swf['player_load']({
'vast': vast, // parsed VAST
'callback': 'window.player.events.backchannel' // some available method to send success/error messages to
});
[...]
embedded_swf['player_exec']({
'command': {
'command': 'play',
'target': 'ad.id.1' // some identifier flash-player can work with
},
'callback': 'window.player.events.backchannel'
});当然,这只是你如何做的一个例子,只是你要做的事情的一小部分。但我希望这能有所帮助。
祝您今天愉快。
https://stackoverflow.com/questions/40161438
复制相似问题