我正在構建一個執行大量客戶端數據下載和處理的應用程序。數據處理通過在駐留在子域上的iframe中處理而與主應用程序隔離。這是下載數據的iframe。通信是通過postMessage。在同一個域上的不同窗口之間進行通信
一切工作正常,但它可能會更好。
如果用戶打開額外的選項卡/窗口,應用程序當前會重新加載所有數據,甚至可能會執行重複的處理工作,這不是一個問題,除了會減慢所有操作並減少頁面加載時間。
我想要做的是每個頂級選項卡/窗口只與一個處理iframe進行通信,如果原始窗口關閉,可以恢復。麻煩的是,這些不是通過JavaScript打開,而是通過普通的瀏覽器方法打開標籤中的鏈接,所以我無法獲得發送消息所需的iframe的引用。
是否有反正我可以將iframe的窗口引用傳遞給其他選項卡,以便它們可以通過postMessage與它進行通信?在某種程度上可以通過共享工作人員來實現嗎?
我意識到我可以在整個處理任務中使用共享工作人員,但由於數據來自第三方域,因此無法從工作人員中訪問,所以這會產生問題。
只需要與所有主流瀏覽器的最新版本兼容。
編輯:我剛剛發現SharedWorker尚未在firefox中實現,所以我猜這是行不通的。任何其他方式我可以實現這一目標?
編輯2:我發現,你可以使用:
var win = window.open('', 'my_window_name');
捕捉來自任何其他窗口的iframe的參考。但是,如果iframe尚不存在,則它會將其作爲窗口打開。即使它立即關閉,它也會導致閃爍並導致「彈出窗口阻止」消息,使其無法使用。
我想網絡工作者是不是一種選擇,因爲它只會在IE 10中工作;-) –
使用html5 localstorage,可能是? – pahnin
並使用javascript來檢查 – pahnin