2009-10-11 88 views
3

我一直沒能得到這樣的工作:我可以從絕對URL加載web worker腳本嗎?

var myWorker = new Worker("http://example.com/js/worker.js"); 

在我的Firebug的控制檯,我得到這樣的錯誤:

無法加載腳本: http://example.com/js/worker.js ( nsresult = 0x805303f4)

每個Web工作者的使用示例我見過從相對路徑加載腳本。我試過這樣的東西,它工作得很好:

var myWorker = new Worker("worker.js"); 

但是,如果我需要加載不在相對位置的工作腳本?我搜索廣泛,我沒有看到任何地方解決這個問題。

我應該補充一點,我試圖在Firefox 3.5中這樣做。

+0

您好,您能否詳細說明並告訴我們關於Worker類的更多信息?這是不適用於FF3.5或所有瀏覽器? – mauris 2009-10-11 01:52:46

+0

以下是關於Worker類的官方Mozilla文檔: https://developer.mozilla.org/En/DOM/Worker Firefox是我唯一關心的瀏覽器。我最終希望在正在使用的Greasemonkey腳本中使用Web工作人員。 – mattblodgett 2009-10-11 02:04:46

回答

8

對於那些不知道,這裏是Web工作規範: http://www.whatwg.org/specs/web-workers/current-work/

和後由John Resig的: http://ejohn.org/blog/web-workers/

的Javascript,一般,不能外部訪問什麼JavaScript文件來自的網址。

我相信這就是該規範的這部分指的是從:http://www.w3.org/TR/workers/

4.2 Base URLs and origins of workers 

Both the origin and effective script origin of scripts running in workers are the origin of the absolute URL given in that the worker's location attribute represents. 

這篇文章有什麼錯誤應該在你的情況下拋出聲明: http://canvex.lazyilluminati.com/misc/cgi/issues.cgi/message/%[email protected]%3E

+0

「起源」的含義有點不清楚。如果您查看WHATWG文檔中討論「來源」的文檔,請注意以下事項:「因此,腳本必須是與原始頁面具有相同方案的外部文件:無法從data:URL加載腳本或javascript:URL和https:頁面無法使用帶有http:URL的腳本啓動工作人員。「 在這裏查看第3點:http://www.whatwg.org/specs/web-workers/current-work/#worker – mattblodgett 2009-10-11 02:17:54

+0

我發現有關這個原因有趣的錯誤消息的文章,作爲你是對的,它看起來似乎比我想在規範中看到的更模糊,我認爲JavaScript安全模型將是問題,但鑑於有辦法解決這個問題,你可以嘗試解決從其他網址加載JavaScript文件,然後看看網絡工作者是否從絕對網址工作 – 2009-10-11 02:21:32

+0

「...您可以嘗試解決從其他網址加載JavaScript文件,然後看看網絡工作者是否從絕對網址「你能詳細說明一下嗎?我不明白你在說什麼解決方法。」 – mattblodgett 2009-10-11 02:31:05

3

按照Web Worker draft specification,則工作人員必須與"first script"位於同一個域中,即創建該工作人員的腳本。第一個腳本的URL是工作人員URL的解析對象。

+0

你確定「第一個腳本「的東西仍然代表當前的規格? – saaj 2016-08-13 16:18:15

0

且不說...

剛想任何時候你有一個跨源限制策略,沒有平衡到文件系統(文件://path/to/file.ext) - 意思,文件協議觸發對此策略的處理。

這適用於Canvas API中的「髒圖像」。

希望這有助於=]

相關問題