2012-08-08 23 views
9

我知道web工作人員無法直接訪問dom。但是這樣做是一個糟糕的主意:將文檔對象傳遞給Web工作人員

var doc = $(document); 

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

worker.postMessage({ cmd: 'doDomStuff', data: doc }); 

你看到這代碼的任何缺點?

任何提示/意見非常感謝。

更新:只是要清楚:我只想從DOM中getdata,不設置任何新值或以任何方式操縱DOM。

+1

在其他語言中,操縱UI的唯一線程創建它的線程(我專門思考的.Net,但Java和其他人可能就此別過)。除非瀏覽器以不同的方式處理事情,否則這可能是Web工作人員自然不能訪問DOM的原因。 – 2012-08-08 21:04:15

+1

@CoreyOgburn請參閱我的更新 – Johan 2012-08-08 21:09:03

+2

聽起來像是一件容易測試的東西。 – 2012-08-08 21:11:03

回答

6

我看不出有什麼理由爲什麼你 不能這樣做,但這可能會導致問題,當你試圖操縱同一個元素的工人和主js代碼在同一時間。

您需要爲代碼添加一些互斥鎖。

對不起劃傷以上......


工人做訪問:

的DOM(它不是線程安全的)
窗口對象
文檔對象
父對象

Source

+3

我知道工作人員不能直接訪問DOM,這就是爲什麼我試圖通過它作爲一個對象。我忘了提及我沒有打算在工作人員中操縱它。我只想獲得價值,而不是設置任何東西。 – Johan 2012-08-08 21:07:44

+0

@Johan它不能做任何事情**的dom。任何東西,你通過它將基本上是一個克隆的對象,你將無法做任何事情...... – Neal 2012-08-08 21:08:18

+0

噢好吧,非常感謝信息 – Johan 2012-08-08 21:10:28