Я пытаюсь создать два баннера с adobeEdge и импортировать их с iframe в 3-м файле. Таким образом, структура будет что-то вроде этого:Adobe Edge HTML5 Локальное подключение
banner1.html
banner2.html
index.html (где banner1 и banner2 будет встраивать с помощью фрейма).
Эти два баннера будут анимированы, однако размер файла, время загрузки каждого из них может варьироваться, поэтому они не будут загружаться в одно и то же время.
Проблема в том, что мне нужно, чтобы они оба начали играть в одно и то же время (во флэш-памяти, называемой локальным подключением), поэтому идея состоит в том, чтобы проверить, когда загружаются оба фрейма, и если каждый из них отправляет сообщение DONE на другой, я буду играть в них.
Я написал код, который на самом деле работает, но все же один баннер всегда имеет задержку. Вот мой код:
Баннер 1
<script type="text/javascript">
var fr = window.parent.frames["frame2"];
var frwin = fr.contentWindow;
var otherLoaded = false;
var selfLoaded = false;
var process = setInterval(function(){load();},10);
window.addEventListener("message", receiveMessage, false);
function setLoaded(){
selfLoaded = true;
frwin.postMessage("Done", "DOMAIN");
}
function load(){
if(otherLoaded === true && selfLoaded === true){
clearInterval(process);
AdobeEdge.bootstrapCallback(function(compId) {
AdobeEdge.getComposition(compId).getStage().play();
});
}else if(selfLoaded === true && otherLoaded !== true){
frwin.postMessage("resend", "http://izorgor.com");
}
}
function receiveMessage(event) {
if (event.origin !== "DOMAIN")
return;
if(event.data === 'Done'){
otherLoaded = true;
console.log("Done");
}
if(event.data === 'resend'){
fr = window.parent.frames["frame2"];
frwin = fr.contentWindow;
frwin.postMessage("Done", "DOMAIN");
console.log("resend");
}
}
</script>
Баннер 2
<script type="text/javascript">
var fr = window.parent.frames["frame1"];
var frwin = fr.contentWindow;
var otherLoaded = false;
var selfLoaded = false;
var process = setInterval(function(){load();},10);
window.addEventListener("message", receiveMessage, false);
function setLoaded(){
selfLoaded = true;
frwin.postMessage("Done", "DOMAIN");
}
function load(){
if(otherLoaded === true && selfLoaded === true){
clearInterval(process);
AdobeEdge.bootstrapCallback(function(compId) {
AdobeEdge.getComposition(compId).getStage().play();
});
}else if(selfLoaded === true && otherLoaded !== true){
frwin.postMessage("resend", "http://izorgor.com");
}
}
function receiveMessage(event) {
if (event.origin !== "DOMAIN")
return;
if(event.data === 'Done'){
otherLoaded = true;
console.log("Done");
}
if(event.data === 'resend'){
fr = window.parent.frames["frame1"];
frwin = fr.contentWindow;
frwin.postMessage("Done", "DOMAIN");
console.log("resend");
}
}
</script>
index.html
<iframe width="900" height="200" id="frame1" src="banner1.html" frameborder="0" scrolling="no"></iframe>
Благодаря
AdServer отбывает обои баннер как два разных фрейма. Моя первая идея заключалась в обмене postMessage между этими двумя (мой сценарий выше). Но по какой-то причине, когда у меня есть переход какого-либо объекта между этими двумя форматами, я вижу, что он не запускается точно в одно и то же время. Спасибо за этот скрипт, я дам ему попробовать – izorgor