【问题标题】:Fire javascript retrieved from a websocket从 websocket 检索到的触发 javascript
【发布时间】:2011-04-28 14:57:59
【问题描述】:

我现在正在玩 WebSockets,我希望有以下设计模式。

连接到我在服务器上的 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执行。

【问题讨论】:

    标签: javascript jquery html websocket


    【解决方案1】:

    由于您使用的是 jQuery,因此您可以使用 jQuery.globalEval。或者,您可以使用eval,但globalEval 在其运行的上下文方面具有一些优势。

    【讨论】:

      【解决方案2】:

      您要查找的函数是eval()

      请不要忘记它听起来像 evil 是有原因的 ;)

      【讨论】:

      • 在某些情况下eval 并不邪恶。请注意,不是很多。 :-) 但是在这种情况下,从您自己的服务器上运行脚本代码,它与使用 script 元素并没有根本的不同。 (范围问题除外。)
      • 确实如此,但根据脚本的作用,最好只发送 JSON 然后对其进行处理。
      【解决方案3】:

      eval 函数在 local 范围 中评估代码,对于那些应该在 global 范围 中评估的代码,使用 indirect 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);
      

      【讨论】:

        【解决方案4】:

        虽然它的使用通常不受欢迎,但 eval() 函数在这里可以满足您的需求,具体取决于返回代码的复杂性。

        【讨论】:

          【解决方案5】:

          您正在寻找eval 函数:http://www.w3schools.com/jsref/jsref_eval.asp 但要小心,这意味着可以执行潜在不安全的 JavaScript 代码。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-09-29
            • 1970-01-01
            相关资源
            最近更新 更多