我目前正在玩弄 Workers,它们非常整洁,但肯定缺少一件事:向 Worker 传递匿名函数的可能性。因为我手头有一些空闲时间,所以我想看看我是否能找到解决这个问题的办法。我认为实现这一目标的最明显方法是使用Blob,因此我设置了这个小脚本:
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 请求,我只是想知道它是否通常是可能的。