2011-04-28 4 views
2

현재 웹 소켓을 가지고 놀고 있습니다. 다음과 같은 디자인 패턴을 원합니다.자바 스크립트를 웹 소켓에서 가져옴

서버의 웹 소켓에 연결하면 서버가 브라우저에 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로 실행하는 방법은 무엇입니까?

답변

3

jQuery를 사용하고 있으므로 jQuery.globalEval을 사용할 수 있습니다. 또는 eval을 사용할 수도 있지만 globalEval은 실행되는 컨텍스트 측면에서 몇 가지 이점이 있습니다.

2

원하는 기능은 eval()입니다. 그것은 eval() 기능은 반환 코드의 복잡성에 따라, 여기에 사용자의 요구에 맞게 것, 사용이 일반적으로 눈살을 찌푸리게된다이지만)

+0

'eval'이 악의가 아닌 상황이 있습니다. *** ***, 마음이 아닙니다. :-) 그러나이 경우 스크립트 코드를 자신의 서버에서 실행하면'script' 요소를 사용하는 것과 근본적으로 다르지 않습니다. (범위 문제를 제외하고) –

+0

사실, 스크립트에 따라 JSON을 보낸 다음 처리하는 것이 더 나을 수도 있습니다. – ThiefMaster

0

을,

는 이유가 evil 같은 소리 잊지 마십시오.

1

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); 
관련 문제