#javascript #iframe #vast #vpaid
#javascript #iframe #огромное #vpaid
Вопрос:
Я пытался разобраться в этой проблеме довольно долгое время. Я создаю скрипт VPAID для поддержки базовой функциональности VPAID в соответствии со спецификацией.
Для показа рекламы я использую слот, предоставленный в параметрах инициализации, и добавляю iFrame с моим видеопроигрывателем внутри (PlayerJS) для показа рекламы (обязательно использовать собственный проигрыватель для отслеживания событий сторонних разработчиков и т.д.). Все работает хорошо, если слот не скрыт свойством display CSS или если его контейнер не скрыт. Когда он скрыт, браузер не позволяет отображать iframe dom с помощью js, и поэтому проигрыватель не запускается.
initAd(width, height, viewMode, desiredBitrate, creativeData, environmentVars) {
this._attributes.width = width
this._attributes.height = height
this._attributes.viewMode = viewMode
this._attributes.desiredBitrate = desiredBitrate
this._slot = environmentVars.slot || this.this.emit('AdError', 'Slot is invalid')
this._slotWnd = function(a) {
a = a.ownerDocument
return a.defaultView || a.parentWindow
}(this._slot)
this._videoSlot = environmentVars.videoSlot || this.this.emit('AdError', 'Video slot is invalid')
try {
this.adParameters = JSON.parse(creativeData.AdParameters)
} catch (e) {
console.error('Error parsing AdParameters')
console.log(e)
}
this._slotWnd.addEventListener('message', (event) => { this.eventHandler(event, this) })
this._player = new PlayerFrameIniter(this._slot, this._slotWnd, false, true)
this._player.init( () => this.emit('AdLoaded') )
}
И в PlayerFrameIniter я создаю iframe, подобный этому:
createIframe(container, url, onFrameLoaded) {
this._frame = this._context.document.createElement('iframe')
const style = {
width: '100%',
height: '100%',
border: 0,
position: 'absolute',
overflow: 'hidden'
}
Object.assign(this._frame.style, style)
this._frame.src = url
this._frame.onload = onFrameLoaded
container.appendChild(this._frame)
}
Как я могу заставить фрейм внутри слота отображаться правильно или, может быть, есть другой подход к этой задаче?
Ответ №1:
Похоже, это проблема PlayerJS, поэтому вопрос больше не актуален
Комментарии:
1. Привет, Виталий, можешь поделиться кодом для этого через github, если не возражаешь /?