使用带有Chrome扩展的Web Workers

qltillow  于 2023-05-11  发布在  Go
关注(0)|答案(1)|浏览(279)

我在这里试图实现的是在worker上执行XHRHttpRequest()来加速我的扩展。我正在使用worker_proxy.jshere。它工作得很好,只是我不知道如何将字符串传递给这个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()

eaf3rand

eaf3rand1#

要向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

相关问题