2011-04-28 18 views
2

我現在正在玩WebSockets,並且我想要有以下設計模式。從websocket檢索到的JavaScript javascript

連接到服務器上的websocket,服務器將JavaScript發送到瀏覽器以通知它如何與用戶交互。我找到了JQuery方法getScript,它在後臺加載腳本,並在加載時執行它。我想做一個類似的事情,但是從Websocket收到的消息。

所以,基本上,我想要做的是...

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

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

我需要什麼樣的代碼來代替executeJS得到這個JavaScript來火?可能嗎?

我想這個問題與javascript沒有直接關係,但是我如何獲取一段文本並將其作爲Javascript執行。

回答

3

由於您使用的是jQuery,因此您可以使用jQuery.globalEval。或者,您可以使用eval,但globalEval在運行環境方面具有一些優勢。

2

您正在尋找的功能是eval()

請不要忘記,這聽起來像evil是有原因的;)

+0

有些情況下'eval'不是邪惡的。不是很多***,介意。 :-)但是在這種情況下,從您自己的服務器運行腳本代碼,與使用'script'元素沒有本質區別。 (除了範圍問題。) – 2011-04-28 15:02:34

+0

確實,但取決於腳本的作用,發送JSON然後處理它可能會更好。 – ThiefMaster 2011-04-28 15:17:21

0

雖然它的使用是在一般皺着眉頭,在eval()功能會在這裏滿足您的需求,這取決於返回的代碼的複雜性。

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);