2011-04-28 9 views
2

私は現時点でWebSocketで遊んでいます。私は次のようなデザインパターンを持っています。WebSocketから取得したJavaScriptを起動します

サーバー上のwebsocketに接続すると、サーバーはJavaScriptをブラウザに送信してユーザーとの対話方法を通知します。私はJQueryメソッドgetScriptを見つけました。これはバックグラウンドでスクリプトを読み込み、読み込み時にそれを実行します。私はWebSocketから受け取ったメッセージにも同様のことをしたい。

だから、基本的に、私は何をしたい私はこのJavaScriptは火に取得するexecuteJSを交換する必要がありますどのようなコード...

// Create a socket 
var socket = new WebSocket('myURL') 

// Message received on the socket 
socket.onmessage = function(event) { 
    executeJS(event.data); 
} 

のですか?出来ますか?

この質問はjavascriptと直接関係していないと思われますが、テキストを取り込んでJavascriptとして実行するにはどうすればよいですか。

答えて

3

jQueryを使用しているので、jQuery.globalEvalを使用できます。代わりに、evalを使用することもできますが、globalEvalには、実行されるコンテキストに関していくつかの利点があります。

2

あなたが探している機能はeval()です。それはeval()関数が返されたコードの複雑さに応じて、ここにあなたのニーズに合うだろう、使用は一般的に眉をひそめていることですが)

+0

'eval'が悪ではない状況があります。 ***ではありません***、心。 :-)しかし、この場合、あなた自身のサーバーからスクリプトコードを実行すると、 'script'要素を使うことと根本的に違うわけではありません。 (スコープの問題を除いて) –

+0

実際、スクリプトの内容によっては、JSONを送信してから処理するほうが良いかもしれません。 – ThiefMaster

0

を、

は、それが理由で evilのように聞こえることを忘れないでください。

1

のeval関数は間接的にevalを使用し、グローバルスコープに評価されるべきであるそれらのコードのために、ローカルスコープ内のコードを評価し、間接的にevalを呼び出すための最良の方法は次のとおりです。

あり
(1, eval)(yourCode); 

また、動的スクリプト要素を使用することをお勧めします。

var script = document.createElement('script'); 

// detect browser or feature first, only one of these should be used 
// for IE 
script.text = yourCode; 
// for other browser 
script.appendChild(document.createTextNode(yourCode)); 

var head = document.head || document.getElementsByTagName('head')[0]; 
head.insertBefore(head, head.lastChild); 
関連する問題