2017-07-04 33 views
1

我正在製作一個具有兩個功能區按鈕的Office外接程序。每個按鈕鏈接到不同的TaskpaneId,並點擊每個按鈕打開不同的taskpane:兩個任務窗格的通信

<bt:Urls> 
    <bt:Url id="Contoso.Taskpane1.Url" DefaultValue="https://localhost:3000/addin/page1" /> 
    <bt:Url id="Contoso.Taskpane2.Url" DefaultValue="https://localhost:3000/addin/page2" /> 
</bt:Urls> 

現在,我想實現這兩個頁面之間的一些通信。例如,在對page1進行了一些操作後,我想要page2自動刷新(從服務器或localStorage重新加載數據)。因此,當我們點擊page2時,它已經是最新的。目前,它沒有系統地更新,並且要刷新page2,我們必須點擊其功能區按鈕。

https://localhost:3000/是用平均堆棧構建的,所以頁面使用angularjs並且後面有一個服務器。兩頁通信的一種方式是通過服務器:page1通過socket.io向服務器發送消息,然後服務器通過socket.io發送消息至page2。這有點乏味。

有沒有人知道用於Office的JavaScript API是否有任何簡單(和跨平臺)的方式來允許2個任務面板之間的這種通信?

PS:使用localStorageStorageEvent是不是一個好主意,因爲它似乎並沒有在Excel工作適用於Mac或Windows操作系統。

回答

0

目前沒有很好的解決方案。對於Script Lab,我們使用本地存儲和定時器在不支持事件(IE 11)的平臺/瀏覽器上每秒檢查一次時間戳。本地存儲的問題不是定時器的需求,而是您無法真正將其範圍僅限於一組特定的任務窗格。相反,它最終會影響其他文檔上的任務窗格。對於腳本實驗室,我們決定忍受這種行爲,而不是花在基於服務器的通信上的能量(我假設你的意思是socket.io或類似的?)

+0

是的,我使用'socket.io',它的工作原理到目前爲止...因此,我們將欣賞圍繞Office加載項的簡單的跨平臺事件處理/消息傳送... – SoftTimur