我目前正在和工人一起玩弄它们非常整洁,但有一点肯定是缺失的:可以通过工作人员传递匿名功能。因为我手上有空闲时间,所以我想知道是否可以找到解决这个问题的方法。我认为最明显的实现方法是使用Blobs,因此我设置了这个小脚本:
var blob = new Blob(['var getLastSeen = function(player) { \
$.getJSON("fetch.php?player=" + player, function(data){ \
if(data.online) \
postMessage("online"); \
else if(data.online == false) \
postMessage(data.lastSeen); \
}); \
};\
getLastSeen("AI@speedersclan.org");'],{ "type" : "text\/javascript" });
var worker = new Worker(window.URL.createObjectURL(blob));
worker.onmessage = function (Event) {
document.getElementById("logDisplay").innerText = Event.data;
};
(getLastSeen执行数据库查找以查看播放器最后一次登录的时间)
正如您可能已经注意到我需要jQuery来运行此脚本,因此我想我只是在Blob的开头添加这一小块代码:
var head= document.getElementsByTagName("head")[0]; \
var script = document.createElement("script"); \
script.type= "text/javascript"; \
script.src= "//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"; \
head.appendChild(script); \
我没有注意到,虽然在查看Blob的类型之后我立即应该有,但是没有办法与DOM交互,这意味着加载外部脚本显然是不可能的(至少与我正在使用的方法。)
(tl; dr)所以我的问题是,“如何将外部脚本加载到blob中,尽管我无法与DOM交互”?
编辑:我很清楚我不需要jQuery来处理简单的Ajax请求,我只是想知道它是否通常是可能的。
答案 0 :(得分:1)
importScripts
能解决您的问题吗? https://developer.mozilla.org/en-US/docs/DOM/Using_web_workers#Importing_scripts_and_libraries
这就是你通常在Worker中导入库的方式。但是,在这种情况下,我认为你仍然不能导入jquery,因为jquery需要访问DOM。请参阅HTML Web Worker and Jquery Ajax call。