Создание iFrame внутри слота для VPAID ad не является отображением DOM фрейма

#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, если не возражаешь /?