Peerjs: Tidak dapat terhubung ke rekan di Safari di macOS

Dibuat pada 24 Jan 2019  ·  11Komentar  ·  Sumber: peers/peerjs

Setiap kali saya mencoba terhubung ke rekan di Safari dengan menentukan opsi { andal: true } saya mendapatkan kesalahan:
TypeError: Object is not a constructor (evaluating 'new Reliable(this._dc, util.debug)')
image

Apakah ada cara saya masih bisa menggunakan saluran data yang andal di Safari?

Semua 11 komentar

Maaf, saya tidak diperbarui tentang Safari, saya bahkan tidak memiliki akses ke sana. Tapi ada beberapa orang di sini yang menggunakan PeerJS dengan Safari, mari kita tunggu.

Kesalahan tampaknya berasal dari cara Handal diekspor.

sumber -> import { Reliable } from "reliable";
babel -> var Reliable = require('reliable');

Mengubah kode yang dikompilasi menjadi karya berikut...
this._reliable = new Reliable.Reliable(this._dc, util.debug);

dan kemudian negotiator.js tidak ada impor untuk Reliable https://github.com/peers/peerjs/blob/master/lib/negotiator.ts#L226 & 280

[Kesalahan] Penolakan Janji yang Tidak Tertangani: ReferenceError: Tidak dapat menemukan variabel: Handal

EDIT:
sepertinya PR untuk memperbaikinya dibuka tetapi tidak pernah digabungkan https://github.com/michelle/reliable/pull/18/commits/a797057fe25174cee33f1eb7331b5808bd8a0ff5

Alternatif untuk memperbaikinya yang tidak bergantung pada lib ini adalah dengan menghapus reliable: true dari konfigurasi init Anda

Wow, saya tidak punya akses ke repo itu. @tombertrand apa yang Anda rekomendasikan? perbaikan untuk impor atau hapus saja reliable: true ?

Jika lebih baik memilikinya, saya akan mengkloning repo dan melakukan pembaruan.

Mencoba men-tweet dan mengirim surat ke @michelle jika dia dapat menggabungkan PR ini. Hanya berharap dia akan merespon.

Saya telah bereksperimen dengan Safari, memperbaiki kesalahan JS yang disebabkan oleh Reliable lib dan negotiator.ts . Tidak ada lagi kesalahan tetapi pesan (mis: connection.send('hello'); ) tidak akan mencapai koneksi saat di Chrome/FF tidak ada masalah. Saya akhirnya melakukan koneksi yang andal untuk browser yang mendukungnya, tidak dapat diandalkan untuk browser yang tidak didukung.

import Peer from 'peerjs';
import Util from 'peerjs/lib/util';

// Host
const peer = new Peer(HOST_PEER_ID, { secure: true, debug: 3 });

// Guests
const guestPeer = new Peer(null, { secure: true, debug: 3 });
const guestConnection = guestPeer.connect(HOST_PEER_ID, {
  reliable: Util.supports.reliable, // true / false depending if the browser supports reliable connection
});

Saya telah menghubungi @michelle dan dia menggabungkan PR dalam repo yang andal. Juga solusi yang bagus @tombertrand. Tapi masih sedih melihat koneksi yang andal tidak berfungsi di Safari :(

Seharusnya hanya berfungsi, karena package.json menggunakan versi master terbaru dari repo.

Oke, jadi bagian 'dapat diandalkan' diperbaiki, saya masih melihat ini ketika saya mencoba terhubung ke rekan dari Safari 12:
image

Adakah yang bisa menyarankan apa yang salah di sini? Terima kasih.

PS Saya perhatikan peerjs menggunakan versi lama dari paket adaptor webrtc. Mungkin inilah alasan mengapa kita sering keluar dari integrasi sinkron. Hanya sebuah asumsi.
PPS Saya telah melakukan fork peerjs, mengubahnya untuk memanfaatkan perpustakaan adaptor webrtc terbaru dan saya masih mendapatkan kesalahan yang sama di Safari ketika mencoba membuat koneksi.

Saya bisa melacak masalahnya sampai ke titik ini. Setelah t.RTCPeerConnection baru dipanggil dengan array iceServers, ia gagal secara internal dalam kode asli.
Screen Shot 2019-03-21 at 8 30 46 AM

Masalahnya ternyata persis seperti yang disiratkan oleh kesalahan. Saya melewati array url alih-alih url dan array string aktual yang berisi url untuk server setrum. Kesalahan saya setelah semua.

Apakah ini terkait dengan #574? Saya mencoba menggunakan safari. Jika Safari adalah tuan rumah, itu gagal secara diam-diam. Jika saya mencoba menghubungkan browser lain (mis. Chrome) ke Safari, saya mendapatkan kesalahan

Unhandled Promise Rejection: TypeError: Argument 1 ('options') to RTCPeerConnection.createOffer must be a dictionary

Tampaknya ada masalah dengan i.createOffer(function(e) { di peer.min.js

Apakah halaman ini membantu?
0 / 5 - 0 peringkat