从 websocket 检索到的触发 javascript
Posted
技术标签:
【中文标题】从 websocket 检索到的触发 javascript【英文标题】:Fire javascript retrieved from a websocket 【发布时间】: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执行。
【问题讨论】:
【参考方案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 代码。
【讨论】:
以上是关于从 websocket 检索到的触发 javascript的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 websocket 从 Thingsboard 检索所有客户设备的遥测数据