如何使用swf vpaid?
Posted
技术标签:
【中文标题】如何使用swf vpaid?【英文标题】:How to use swf vpaid? 【发布时间】:2017-03-02 20:49:02 【问题描述】: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();
现在我有一个带有一些 API 的 adUnit:
adUnit.initAd
adUnit.handshakeVersion
...
还有另一种控制广告的方法。
但如果我有 swf,那么我不知道该怎么办。
我有网址:
https://somedomain.net/vpaid.swf
我可以使用 swfobject 创建对象:
swfobject.embedSWF(
"https://somedomain.net/vpaid.swf",
"myContent", "640", "480", "9.0.0"
);
但我不知道如何获得 AdUnit。我想从这个 swf 中获取 AdUnit,并且我希望这个 AdUnit 具有相同的 API:
adUnit.initAd
adUnit.handshakeVersion
...
但我不知道该怎么做:(。
【问题讨论】:
【参考方案1】:您需要实现自己的 AS3/Flash 播放器才能这样做。
播放器将通过flash.external.ExternalInterface
接收 VPAID 资源 URL,或者您将整个解析后的 VAST 交给 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'
);
当然,这只是您如何做到这一点的一个示例,而这只是要做的事情的一小部分。但我希望它会有所帮助。
祝你有美好的一天。
【讨论】:
以上是关于如何使用swf vpaid?的主要内容,如果未能解决你的问题,请参考以下文章