一つの方法は、私は「ウィンドウ・プロキシ」と呼ぶものを作成することです....
は、あなたがあなたのnew Worker('at.yourCDN.com/worker.js')
とを指しているCDN上の労働者をホストしてみたいと思います。このワーカーは、共有された状態を維持するために同じドメイン上の異なるタブを許可するSharedWorkerかもしれません。おそらく、あなたは、この労働者が異なる地域のすべてのTABSにアクセスできるようにしたいと思うかもしれません。つまり、ワーカーをService/Serverプラットフォームとして使用したいと考えています。
問題: 異なるドメインにある、またはファイルプロトコルを使用するWorker()/ SharedWorker()を指すことはできません。このようCDNとして、あるいはファイルから()
- があなたのSharedWorkerのための専用の場所を持っている://プロトコル
これは、私は今週テストをすることがありますものです。
- 新しいウィンドウまたはiframeを使用してこの場所を開きます。
- このウィンドウまたはiframeを介して、このワーカーとのやりとりを代理的に行い、ワーカーにメッセージを転送します。このウィンドウ/ iframeは、単にDOM内のスクリプトタグであって、ワーカー。
詳細: は単純に、この労働者にアクセスする必要がある任意のウィンドウ/タブがmyWindow.postMessage('my message')
を実行し、myWindow
は、作業者にport.postMessage(myMsg)
を実行してみましょうしています。
私が言ったように、私はこれをまだテストしていませんが、これが助けてくれることを願っています。
また、iframe-injectionとwindow.postMessageingをうまく軽減するために、ヘッドレスブラウザ、またはCORSの「Forever Server」を探しています。
解決策を見つけるときに私はポストバックします。
************************************ EDIT ************************************
私はSharedWorker
を使用して状態を共有する方法について研究しているだけではなく、同一ドメイン上の複数のタブのために、だけでなく、複数のドメイン間で状態を共有する - ローカルでホストされたサービスとしてSharedWorker
を使用。これは解決策ではありませんが、ここではFileReader
APIから労働者を構築する方法を実証するためのコードです:
// DOMのCODE:
<b>1</b>
<input id="uploadImage" type="file" name="myPhoto" onchange="onSelect();" autofocus="true" />
<script>
var fReader = new FileReader();
fReader.onload = function(e){
var blob = new Blob([e.target.result], {type: 'text/javascript'});
var blobURL = URL.createObjectURL(blob);
var w = new SharedWorker(blobURL);
w.port.onmessage = function(e){
console.log('%%^', e);
};
w.port.start();
w.port.postMessage('Echo');
};
function onSelect(e){
var file = document.getElementById("uploadImage").files[0];
var dataURL = fReader.readAsText(file);
}
</script>
//デスクトップ上WORKERファイルのコード:
var ports = ports || [];
self.onconnect = function(e){
var port = e.ports[0];
ports.push(port);
port.addEventListener('message', function(e){
port = e.target;
ports.forEach(function(p){
p.postMessage('gWorker:: ' + e.data);
});
}, false);
port.start();
};
POSSIBLE SOLUTIONS:
は限りCDN-労働者が行くように、我々がを使用できないようです/BlobBuilder
これらはローカルheap
に独自のworker object
を作成します。 CORS
をサーバーとして使用することはできません。CORS
を有効にすると、XMLHttpRequest
を介してワーカーコードを投げることができますが、new Worker('http://from.mycors.com/enabled/server')
を作成すると、同じ "DOM Exception 18
" SecurityError
が多すぎます。
上記の「ウィンドウプロキシ」方式(iframe.postMessage()
、別のサーバのiframeには独自のワーカー、window.onmessage
のメッセージをワーカーに転送する)が最適なソリューションです。 http以外の別のインターネットプロトコルを利用する予定の場合、window.postMessageはhttpを使用することに注意してください。
また、google-chrome --allow-file-access-from-files
を実行しているものもありますが、これは生産シナリオでは明らかに危険です。
もう1つの方法は、WebRTCアーキテクチャ用のランデブーポイントを作成することです。これはおそらく最も堅牢です。
これにより、多くの不必要な研究が省け、より良い解決策が得られることを願っています。
乾杯、
これは、 'heap'に' new Object'を作成し、ファイル自体を使用しません。同じドメインのタブ間で使用できる 'SharedWorker'を使用したいが、複数のドメイン(規約上)が分散ネットワークのサービスとしてそのドメインを使用できるようにするため、私は尋ねる。 – Cody
醜いですが、それは動作します。しかし、 "最初と最後の行を削除する"は "{}}"の間に関数本体を抽出するべきです。 –