Я пытаюсь передать строку из одного окна браузера в другое через RTCDataConnection.
Есть множество примеров этой работы, например, здесь: https://gitlab.com/lesmana/webrtc-без-сигнального-сервера
Они работают довольно хорошо в большинстве браузеров, однако в (по крайней мере, в настольной версии) Safari 12 попытка подключения в конечном итоге приводит к сообщению о «неудачной ошибке», генерируемому в состоянии подключения после того, как предложение / ответ и четвертое сказано и сделано. .
Добавление WebRTC adapter.js ничего не исправляет.
Но кроме того, кажется, что каждый пример или учебник, который якобы демонстрирует RTCDataChannel общение ... ломается в Safari.
Это должно работать? Я не могу найти соответствующие проблемы в bugs.webkit.org.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Утверждения о том, что WebRTC можно использовать без сигнального сервера, в целом следует воспринимать с долей скептицизма. Safari ведет себя немного по-другому при использовании без getUserMedia, чтобы избежать утечки IP-адресов.
В этом случае вы обмениваетесь pc.localDescription.sdp с помощью копирования-вставки. Этот SDP включает в себя нет кандидатов на локальный хост (даже если вы получаете их в событии onicecandidate). Я подал ошибка вебкита.
Если вы хотите временно обойти это, отметьте любого кандидата с «типовым хостом» здесь и добавьте его здесь (убедившись, что sdp все еще действителен и содержит завершающую новую строку и т. д.), то же самое для отвечающего.
при использовании stun-сервера включаются кандидаты srflx. Этот мая работает даже на некоторых NAT. Не на других. Ищите «NAT hairpinning», если хотите узнать всю историю ;-)
Отличный ответ. Вывод SDP довольно обманчив, поскольку он определенно выглядит так, как будто включены кандидаты на локальный хост.