37
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Electronでskyway.ioを使う

Posted at

skaywayを使えば、WebRTCのP2Pビデオチャットが簡単に実装できる。
今、skywayを利用していたWebアプリをElectronに移行しようとしているのだが、Electronでskywayがうまく動かなかった。
上手くいくように頑張ったメモです。

原因

XHRやWebSocketで通信する際のOriginがfile://になっており、skyway側で弾かれるのが原因っぽい。

image

skywayは利用登録をする時にリクエスト元ドメインを指定するようになっていて、そこに登録されていないOriginからのリクエストは弾くようになっているのだろうと推測した。

image

解決策

skywayのpeerjsをforkして、XHRをisomorphic-fetchに、WebSocketをwsに書き換え、Peerをインスタンス化するときのオプションにoriginを追加した。(ブラウザのXHR、WebSocketはOriginの書き換えが出来ないため)
originにはskyway.ioに登録した際のドメインを渡せばOK。

$ npm install --save skyway-peerjs-electron
var Peer = require('skyway-peerjs-electron');
var peer = new Peer({ key: 'skyway.ioに登録した時に発行されるキー', origin: 'http://example.com' });

まとめ

skywayにかぎらず、file://でロードしている場合はクロスドメイン制約に引っかかる可能性があるので、サーバ側でAccess-Control-Allow-Originヘッダを適切に設定するか、今回のようにXHRを使わずにNode.js側で処理する必要がある。気をつけなはれや!

37
41
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?