Iframe остановился когда скрыто - PullRequest
0 голосов
/ 08 ноября 2018

Я пишу веб-сайт с живым видео, в котором для воспроизведения видео используются сторонние инструменты.

Чтобы упростить мою проблему, я встроил все компоненты живого видео в одну HTML-страницу. Похоже на это.

<iframe data-v-140cfad2="" width="800" height="500" src="/backend/render/live?uid=047a911d83&amp;vid=254084" id="haha"></iframe>

Когда страница была загружена, видео воспроизводилось нормально. Тем не менее, я пишу следующие команды в консоли Chrome.

a = document.getElementById('haha')
a.hidden = true;//or a.style.display = 'none'

Не только видео окно исчезло (как я хочу), аудио исчезло (это не я хочу). Я не знаю, как это остановилось, и если есть какой-либо способ, все еще можно запустить видео в фоновом режиме.


Обновление:

Изменение размера iframe на 0px. * 0px - это способ переместить iframe в фоновый режим. Однако это не соответствует моей ситуации.

Я использовал vue.js & element-ui. Iframe был внутри el-tabs компонентов, что означает, что все скрытые операции выполнялись автоматически после смены вкладки. Я не знаю, как предотвратить такую ​​операцию по умолчанию.

A demo of my project


Внутренний код iframe:

(() => {
        window.onload = function() {
                let ctx = document.getElementById('player');
                let uid = ctx.getAttribute('uid');
                let vid = ctx.getAttribute('vid');
                let cfg = {
                        uid: uid,
                        vid: vid,
                        height: 500,
                        width: 800,
                };
                console.log(">>>",cfg);
                player = polyvObject('#player').
                        livePlayer(cfg);
        }
})();
<!DOCTYPE html>
<html>

<head>
  <script src="http://player.polyv.net/script/player.js"></script>
  <script src="http://player.polyv.net/livescript/liveplayer.js"></script>
  <script src="/backend/js/live.js"></script>
  <link rel="stylesheet" href="/backend/css/live.css">
</head>

<body>
  <div id="player" uid="#{uid}" vid="#{vid}"></div>
</body>

</html>

Эта ошибка не произойдет, если iframe вставит файл MP4 или обычную веб-страницу. Это происходит только на моей странице. (это странно, потому что я не понимаю, как функции ВНУТРИ iframe были вызваны скрытым стилем ВНЕ iframe).

Я решаю эту проблему, изменяя компоненты element-ui, чтобы избежать использования v-show при скрытии компонентов. Подробности показывают в решении, размещенном мной.

Спасибо всем, кто ответил на мою проблему:)

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

Это должна быть проблема с бэкэндом, поэтому будет здорово обновить вопрос с содержанием iframe. Я воспроизвожу звук вашей ситуации, который все еще воспроизводится после скрытия iframe

setTimeout(() => { document.getElementById('test').hidden = true; }, 10000 )
<iframe src="https://www.instagram.com/p/Bn5ar2uBd2C/embed/" width="640" height="880" id="test"></iframe>
0 голосов
/ 09 ноября 2018

Наконец, я решаю свою проблему уродливым подходом.

iframe работает нормально, когда был установлен стиль visibility='hidden'. Поэтому я просто переписываю el-tab-pane в element-ui.

Первоначальная версия el-tab-pane была:

<template>
  <div
    class="el-tab-pane"
    v-if="(!lazy || loaded) || active"
    v-show="active"
    role="tabpanel"
    :aria-hidden="!active"
    :id="`pane-${paneName}`"
    :aria-labelledby="`tab-${paneName}`"
  >
    <slot></slot>
  </div>
</template>

A сделал небольшую модификацию следующим образом (v-visible содержался в npm vue-visible пакете ) [TabPane]

<template>
  <div
    class="el-tab-pane"
    v-if="(!lazy || loaded) || active"
    v-show="active || fly"
    v-visible="active || !fly"
    role="tabpanel"
    :aria-hidden="!active"
    :id="`pane-${paneName}`"
    :aria-labelledby="`tab-${paneName}`"
  >
    <slot></slot>
  </div>
</template>

В своем собственном коде я заменил el-tab-pane на свой DIY TabPane, добавив props с именем fly, чтобы указать, использовать ли v-show или v-visible для скрытия компонентов.

0 голосов
/ 08 ноября 2018

Скрыть iFrame

.hiddeniFrame{
    width:0px;
    height:0px;
}

Или убрать его с экрана

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...