繁体   English   中英

使用具有chrome扩展名的Web工作者

[英]Using web workers with chrome extension

我想在这里实现的是在worker上执行XHRHttpRequest()以加速我的扩展。 我在这里使用worker_proxy.js 除了我无法弄清楚如何将字符串传递给这个worker之外,它工作得很好。 这是我的代码:

的manifest.json

"permissions": [
    "alarms",
    "activeTab",
    "tabs",
    "webNavigation",
    "http://*/*", 
    "https://*/*",
    "cookies"
   ],

   "options_page": "options.html",

   "background": {
    "persistent": false,
    "scripts": [ "worker_proxy.js","background.js"]
  },
  "content_scripts": [
    {
      "matches": ["https://*/*","http://*/*"],
      "js": ["jquery-2.1.4.js","hmac-sha256.js","enc-base64-min.js","worker_proxy.js","content.js"]
    }
  ],
  "web_accessible_resources": [ "worker_proxy.html","worker.js"],

worker.js

var somestring=getStringFromContentJS()

var xhr=new XMLHttpRequest();
var request="GETgoogle.com"
xhr.open("GET", request, false);
xhr.send(someString);

postMessage('Result\n' + xhr.responseText);

content.js

  var az_worker = new Worker(chrome.runtime.getURL('getAzProducts.js'));
  az_worker.onmessage = function(event) {
    alert('Message from worker: ' + event.data);
  };

我能够从worker.js接收数据,但是如何向其发送数据,即

var somestring=getStringFromContentJS()

要将数据发送给worker,只需将以下内容添加到worker.js的顶部:

self.onmessage = function(event) {
    // Do something with event.data
};

并使用az_worker.postMessage(somestring); 向它发送数据。


但是你的代码不必要地复杂。 如果您的目标是“加速我的扩展”,那么您应该使用Web worker来创建同步XHR,而是在主线程上使用异步XHR Web Workers非常适合CPU绑定任务,但不会为网络请求等I / O任务提供任何优势。

有关使用XMLHttpRequest的教程,请参阅https://developer.mozilla.org/en-US/docs/AJAX/Getting_Startedhttps://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM