1

私は現在 Worker をいじっていますが、それらはかなりきちんとしていますが、確かに欠けていることが 1 つあります。それは、Worker に無名関数を渡す可能性です。自由な時間があったので、この問題の解決策を見つけられるかどうかを確認したかったのです。これを実現する最も明白な方法はBlobを使用することだと考えたので、この小さなスクリプトをセットアップしました。

var blob = new Blob(['var getLastSeen = function(player) { \
                    $.getJSON("fetch.php?player=" + player, function(data){ \
                        if(data.online) \
                            postMessage("online"); \
                        else if(data.online == false) \
                            postMessage(data.lastSeen); \
                    }); \
                    };\
                    getLastSeen("AI@speedersclan.org");'],{ "type" : "text\/javascript" });

var worker = new Worker(window.URL.createObjectURL(blob));

worker.onmessage = function (Event) {
    document.getElementById("logDisplay").innerText = Event.data;
};

(getLastSeen は、プレイヤーが最後にログインしたのがいつかを確認するためにデータベースを検索します)

お気づきかもしれませんが、このスクリプトを実行するには jQuery が必要なので、Blob の先頭にこの小さなコードのチャンクを追加するだけでよいと考えました。

var head= document.getElementsByTagName("head")[0]; \ 
var script = document.createElement("script"); \
script.type= "text/javascript"; \
script.src= "//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"; \
head.appendChild(script); \

私が気付かなかったのは、Blob のタイプを見た後、すぐにわかるはずだったのですが、DOM とやり取りする方法がないことです。つまり、外部スクリプトをロードすることは明らかに不可能です (少なくとも使用しています)。

(tl;dr) それで私の質問は、「DOM と対話することはできませんが、外部スクリプトを BLOB にロードするにはどうすればよいですか?」ということです。

編集:単純なAjaxリクエストにjQueryが必要ないことはよく知っています。それが一般的に可能かどうかを知りたいだけです。

4

1 に答える 1

1

importScriptsあなたの問題は解決しますか?https://developer.mozilla.org/en-US/docs/DOM/Using_web_workers#Importing_scripts_and_libraries

これが、通常、ワーカーにライブラリをインポートする方法です。ただし、この場合、jqueryはDOMへのアクセスを必要とするため、jqueryをインポートすることはまだ運が悪いと思います。HTMLWebWorkerおよびJqueryAjax呼び出しを参照してください。

于 2013-01-19T14:35:34.617 に答える