Невозможно использовать createDataChanne для RTCPeerConnection в IE / Edge. Есть ли какие-либо решения? - PullRequest
0 голосов
/ 14 декабря 2018

Приведенный ниже код отлично работает для Chrome / Firefox, но не работает в IE / Edge.Я знаю, что это не поддерживается, но мне интересно, есть ли какие-нибудь подходящие обходные пути или решения?Я пытаюсь сделать его кроссбраузерным, что является важной частью.Любая помощь здесь будет принята с благодарностью!

(Полегче на меня, я нуб .... просто ищу какой-то совет и помощь по этому вопросу!) Заранее спасибо!

Ошибка, которую я получаюв Internet Explorer: «Объект не поддерживает это действие» (pc = new RTCPeerConnection ({iceServers: []})

Ошибка, которую я получаю вКрай: "Объект не поддерживает свойство или метод 'createDataChannel'"

var serverFound = false;
var pc = null;
var appURL = ":5000/";
var testURL = appURL + "api/status";

$(document).ready(function() {

// Retry every 5 seconds.
   setInterval(function(){
      findMyIpAndConnectToSubnet();
   }, 5000);

// If we don't get a connection within 10 seconds, then prompt for it.
   setTimeout(function() {
      $("#serverentry").show();
   }, 10000);

   findMyIpAndConnectToSubnet();

   $("#btnConnect").on("click", function() {
      var ip = $("#ip").val();
      localStorage["lastConnection"] = ip;
      location.href = "http://"+ip+appURL;
   });
});

function findMyIpAndConnectToSubnet() {
   window.RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;   //compatibility for firefox and chrome
   pc = new RTCPeerConnection({iceServers:[]}), noop = function(){};
   pc.createDataChannel("");    //create a bogus data channel
   pc.createOffer(pc.setLocalDescription.bind(pc), noop);    // create offer and set local description
   pc.onicecandidate = function(ice){  //listen for candidate events
      if(!ice || !ice.candidate || !ice.candidate.candidate)  return;
      var myIP = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/.exec(ice.candidate.candidate)[1];
      discoverNeighborNPUServers(myIP);
//   console.log('my IP: ', myIP);
      pc.onicecandidate = noop;
   };
}


function discoverNeighborNPUServers(myIP) {

   // Try and speed through by reconnecting to the last one automatically.
   var lastConnection = localStorage["lastConnection"];
   if (lastConnection) {
      $("#ip").val(lastConnection);
      check(lastConnection);
   }

   var skipDiscovery = localStorage["skipDiscovery"];
   if (skipDiscovery != "true") {
      var ipasplit = myIP.split(".");
      ipasplit[3] = "0";

      while (parseInt(ipasplit[3]) < 256) {
         var newipa = ipasplit.join(".");
         check(newipa);
         ipasplit[3] ++;
      }
   }
}

function check(ip) {
   var xhr = new XMLHttpRequest();
   xhr.open('GET', "http://"+ip+testURL, true);
   xhr.timeout = 2000; // Don't wait very long
   xhr.onload = function() {
      if (xhr.status === 200 && !serverFound) {
         serverFound = true; // In case the server is on multiple IPs, just do the first one.
         localStorage["lastConnection"] = ip;
         location.href = "http://"+ip+appURL;
      }
      else {
      }
   };
   xhr.send();
}

1 Ответ

0 голосов
/ 19 декабря 2018

Вы могли бы обратиться к этой теме и использовать adapter.js .

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