在bookmarklet

时间:2015-11-05 14:46:59

标签: javascript bookmarklet web-worker

我让我的网络工作者在书签中工作。代码与调用代码位于同一文件夹中,我没有使用worker.js文件中的importScripts函数显式加载工作代码。

我像这样创建工人

    if(typeof(Worker) !== "undefined") {
        worker = new Worker('worker.js');
    }

然后我这样称呼工人

    worker.postMessage({'cmd': 'start', 'grabRate': grabRate});

应调用我的工作文件中的函数

self.addEventListener('message', function(e) {
    console.log("worker message");
  var data = e.data;
  switch (data.cmd) {
    case 'start':
      console.log("start from worker");
...

我在控制台中没有看到任何调试消息,告诉我该消息'已被召入工人。我只加载调用worker.js的代码(在bookmarklet加载器函数中),因为它是由new Worker函数加载的(如果我还包含了加载器函数中的文件,我可以看到文件,但函数仍然不被称为)。我无法在Chrome调试源列表中看到工作文件或使用importScripts函数加载其他文件。

1 个答案:

答案 0 :(得分:0)

问题在于bookmarklet在运行它的页面的上下文中加载脚本。由于在找不到文件且工作者对象看起来有效时调试器没有给出错误消息,因此工作者无法正常运行的原因并不明显。为了解决这个问题,工人就像这样加载了

 worker = new Worker('//path.to/worker.js');

(//代表https / http域名)