每当我尝试通过指定 {reliable: true} 选项连接到 Safari 中的对等点时,我都会收到错误消息:
TypeError: Object is not a constructor (evaluating 'new Reliable(this._dc, util.debug)')
有没有办法我仍然可以在 Safari 中使用可靠的数据通道?
抱歉,我没有更新有关 Safari 的信息,我什至无权访问它。 但是这里有些人在 Safari 中使用 PeerJS,让我们等他们。
该错误似乎来自 Reliable 的导出方式。
来源 -> import { Reliable } from "reliable";
通天塔 -> var Reliable = require('reliable');
将编译后的代码更改为以下作品...
this._reliable = new Reliable.Reliable(this._dc, util.debug);
然后negotiator.js
缺少Reliable
的导入https://github.com/peers/peerjs/blob/master/lib/negotiator.ts#L226 & 280
[错误] 未处理的承诺拒绝:ReferenceError:找不到变量:可靠
编辑:
似乎是修复它的 PR 已打开但从未合并https://github.com/michelle/reliable/pull/18/commits/a797057fe25174cee33f1eb7331b5808bd8a0ff5
不依赖此库的解决此问题的另一种方法是从您的初始化配置中删除reliable: true
哇,我无法访问该仓库。 @tombertrand你有什么推荐? 修复导入或只是删除reliable: true
?
如果拥有它更好,我将克隆存储库并进行更新。
如果她可以合并此 PR,请尝试向@michelle发送推文和邮件。 只希望她能回应。
我已经尝试过 Safari,修复了Reliable
lib 和negotiator.ts
引起的 JS 错误。 没有更多错误,但在 Chrome/FF 上没有问题时,一条消息(例如: connection.send('hello');
)不会到达连接。 我最终为支持它的浏览器进行了可靠的连接,而对于不受支持的浏览器则不可靠。
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
});
我已经联系到@michelle ,她将 PR 合并到了可靠的 repo 中。 @tombertrand 也是一个很好的解决方法。 但是看到可靠的连接无法在 Safari 上运行仍然令人难过 :(
它应该可以正常工作,因为 package.json 使用来自 repo 的最新主版本。
好的,因为“可靠”部分得到修复,当我尝试从 Safari 12 连接到对等方时,我仍然看到这个:
谁能建议这里有什么问题? 谢谢。
PS 我注意到 peerjs 使用了一个过时的 webrtc-adapter 包版本。 也许这就是为什么我们经常不同步集成的原因。 只是一个假设。
PPS 我已经分叉了 peerjs,将其更改为使用最新的 webrtc-adapter 库,但在尝试建立连接时我仍然在 Safari 中遇到相同的错误。
我能够将问题追溯到这一点。 一旦新的 t.RTCPeerConnection 被一系列 iceServers 调用,它会在本地代码内部失败。
事实证明,问题与错误所暗示的完全一样。 我传入的是 url 数组而不是 urls 以及包含 stun 服务器的 url 的实际字符串数组。 毕竟是我的错。
这与#574有任何关系吗? 我尝试使用野生动物园。 如果 Safari 是主机,它会静默失败。 如果我尝试将另一个浏览器(例如 Chrome)连接到 Safari,我会收到错误消息
Unhandled Promise Rejection: TypeError: Argument 1 ('options') to RTCPeerConnection.createOffer must be a dictionary
peer.min.js 中的peer.min.js
i.createOffer(function(e) {
似乎有问题