2011-07-21 38 views

回答

24

非常基本的區別:只能從創建它的腳本訪問Worker,可以通過來自同一個域的任何腳本訪問SharedWorker

+4

恩,所以''SharedWorker'通過'window.open'彈出窗口可以訪問其他人假設他們在同一個來源?如果他們在一個全新的選項卡上,我猜不是? – Tower

+3

@Tower「同源」與產生另一頁的頁面無關。這意味着(粗略地)從腳本的調用位置開始的域名。請參閱[此圖表](https://developer.mozilla。org/en-US/docs/Web/JavaScript/Same_origin_policy_for_JavaScript#Definition_of_an_origin)。因此,兩個'example.com'上的腳本都可以通過不同的標籤訪問同一個'SharedWorker'。 – rvighne

+0

那麼,這是否意味着即使用戶複製了從同一個域運行相同腳本的選項卡,常規WebWorker也只能有一個連接?或者仍然被瀏覽器視爲相同的腳本?換句話說,app.js連接到worker.js,然後用戶複製他們的標籤:can tab2仍然連接到worker.js? worker.js是否仍然在tab1的app.js和tab2的app.js之間保持相同的內存池。我很感興趣,因爲我需要在後臺進程/守護進程中維護隊列結構,並將事件從同一應用程序中的任何打開的選項卡發佈到此守護進程。 – Cody

9

SharedWorker似乎有更多的功能,然後工人。

其中該功能是:

  • 共享全局範圍。所有SharedWorker實例共享一個全局範圍。

W3C規格:

WHATWG規格:

+0

SharedWorker是否還具有更多「處理能力」? – Pacerier

6

共享工作人員可以使用多個連接。它將消息發佈到端口以允許在各種腳本之間進行通信。

另一方面,一個專門的工作人員只是與其主要連接關聯,不能將消息發佈到其他腳本(工作人員)。

+0

那麼,這是否意味着即使用戶複製了從同一個域運行相同腳本的選項卡,常規WebWorker也只能有一個連接?或者仍然被瀏覽器視爲相同的腳本?換句話說,app.js連接到worker.js,然後用戶複製他們的標籤:can tab2仍然連接到worker.js? worker.js是否仍然在tab1的app.js和tab2的app.js之間保持相同的內存池。我很感興趣,因爲我需要在後臺進程/守護進程中維護隊列結構,並將事件從同一應用程序中的任何打開的選項卡發佈到此守護進程。 – Cody

5

對於任何使用SharedWorker考慮 - 蘋果公司在2015年從取出的WebKit支持SharedWorker在他們current roadmap沒有用於重新實施的計劃。目前正在爲WebKit開發支持Service Workers,並提供類似的功能(see here for comparisons)。

您可以關注ServiceWorkers in WebKit here的開發(也稱爲Safari支持)。

+0

這是什麼意思?蘋果不支持共享工作者? – Pacerier

+0

這意味着Apple WebKit從[Changeset 178310](https://trac.webkit.org/changeset/178310/webkit)刪除了對SharedWorkers的支持,並且不打算重新引入其支持。 – charliebeckwith

相關問題