2016-06-09 74 views
1

如果我試圖通過一個JavaScript文件中使用網絡工作者,鉻拋出一個錯誤 -爲什麼Chrome不允許Web Workers在JavaScript中運行?

Uncaught SecurityError: Failed to create a worker: script at '(path)/worker.js' cannot be accessed from origin 'null'.

但它可以讓他們,如果我們直接通過HTML中使用。

Chrome can't load web worker的答案表示Chrome在從本地文件運行腳本時不允許加載web worker。

爲什麼chrome不允許web worker在本地運行?

Web Workers在Firefox,Safari和Edge中工作得很好

+1

網絡工作者自4.00版本以來一直支持chrome,也許分享你的代碼?我懷疑它可以訪問'worker.js'這就是問題所在。 – Jim

+0

您的應用程序是否從文件系統(file://)運行http(http://,https://)或streight? –

+1

此問題與[Chrome無法加載網絡工作者](http://stackoverflow.com/q/21408510/607407)完全相同。在提出問題之前,請確實考慮使用Google搜索錯誤消息,這會更快。 –

回答

2

此問題已被提問。工作人員應該工作在從磁盤打開的HTML文件中,只要您使用相對路徑即可。但是,如果chrome正確地實現了這一點,就一直存在爭議。

我建議你嘗試在你的腳本中使用相對路徑:

new Worker("./scripts/worker.js"); 

如果還是不行,請參見以下解決方法:https://stackoverflow.com/a/33432215/607407

具體來說,負載工人作爲一個功能,然後將其轉換函數字符串:

function worker_function() { 
    // all worker code here 
} 
var worker = new Worker(URL.createObjectURL(new Blob(["("+worker_function.toString()+")()"], {type: 'text/javascript'}))); 
+0

您提到的答案是「Chrome從本地文件運行腳本時不允許您加載web worker」。 這是我真正的問題。爲什麼我們不能在Chrome本地使用工作人員? –

+0

如果worker js文件在同一個目錄中,我只需要將它稱爲正確的? '新工人(「worker.js」);' – utdev

+0

@InderpartapCheema如果您問*爲什麼*,那麼它的主題,請參閱幫助中心。 –

相關問題