Подтвердить что ты не робот

Как сохранить данные в формате WebRTC в открытой вкладке браузера браузера?

Я создаю веб-приложение, использующее WebRTC. Он отлично работает на настольных браузерах. Однако на небольшом веб-браузере смартфона появляются нежелательные события:

При переключении вкладок на мобильном браузере Chrome для android и firefox для android открыт открытый канал данных webrtc, созданный с помощью .createDataChannel. Обработчик события dataChannel.onclose запускается. Как предотвратить закрытие канала данных? Если это невозможно, возможно ли возобновить канал данных без перезапуска всей фазы сигнализации?

Это также происходит при просмотре файла с <input type="file">

Я немного просмотрел stackoverflow и заметил, что есть другие вещи, которые сокращаются/замедляются на неактивных вкладках, таких как requestTimeOut и setInterval.

Существует ли какая-либо авторизация, чтобы заставить ее оставаться открытой в фоновом режиме.

4b9b3361

Ответ 1

Согласно документации mozilla webRTC..

Обработка изменений статуса канала

Оба наших локальных и удаленных одноранговых узла используют один метод для обработки событий, указывающих на изменение состояния канала.

Когда локальный peer испытывает событие open или close, метод handleSendChannelStatusChange() вызывается:

function handleSendChannelStatusChange(event) {
if (sendChannel) {
  var state = sendChannel.readyState;

  if (state === "open") {
    messageInputBox.disabled = false;
    messageInputBox.focus();
    sendButton.disabled = false;
    disconnectButton.disabled = false;
    connectButton.disabled = true;
  } else {
    messageInputBox.disabled = true;
    sendButton.disabled = true;
    connectButton.disabled = false;
    disconnectButton.disabled = true;
  }
}

}

Если состояние канала изменилось на "открыто", это означает, что мы закончили устанавливать связь между двумя одноранговыми узлами. Пользовательский интерфейс обновляется соответствующим образом, предоставляя текстовое поле ввода для отправки сообщения, фокусируя поле ввода так, чтобы пользователь мог сразу начать вводить, позволяя кнопкам "Отправить" и "Отключить", теперь, когда они пригодны для использования, и отключить кнопку "Подключить", поскольку она не нужна, когда соединение открыто.

Если состояние изменилось на "закрыто", происходит противоположный набор действий: поле ввода и кнопка "Отправить" отключены, кнопка "Подключиться" включена, так что пользователь может открыть новое соединение, если захочет для этого, и кнопка "Отключить" отключена, поскольку она не полезна, когда соединение отсутствует.

поэтому попробуйте сыграть с handleReceiveChannelStatusChange
В этом примере удаленный одноранговый узел, с другой стороны, игнорирует события изменения состояния, за исключением регистрации события на консоли:

function handleReceiveChannelStatusChange(event) {
      if (receiveChannel) {
               console.log("Receive channel status has changed to " +
               receiveChannel.readyState);
   }
 }

Метод handleReceiveChannelStatusChange() получает в качестве входного параметра событие, которое произошло; это будет RTCDataChannelEvent.

Ответ 2

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

Ответ 3

в сафари нет события, которое позволяет вам определить, приостановлена ​​ли табуляция, однако вы можете определить, будет ли вкладка повторно открываться через некоторое время, добавив регулярно повторяющуюся функцию, например, это простой пример -

      var beforeTime = new Date.getTime();
      var getTime = function() {
        var timeNow = new Date.getTime                         
        if (timeNow - beforeTime > 1000) {
           console.log("Woken Up)";
   }
        beforeTime = nowTime;
        setTimeout(getTime, 500);
}

вы можете использовать window.onunload для сохранения данных данных в файл cookie, и если он снова откроется после указанного в этой функции времени (10 секунд), вы можете перезагрузить данные из файла cookie

надеюсь, что это помогло, mukund2003