這裏有幾個問題。讓我們打破他們:
外接生命週期
加載項不會被初始化/加載,直到用戶啓動/將它們添加到文檔中。在此之前,唯一出現的是清單文件中定義的命令。 請注意,取決於您的配置,事情可能會有點不同(下面的更多內容)。
無論您的加載項如何啓動(功能,顯示任務窗格等),生命週期都保持不變。 Office打開清單中指定的URL並連接加載項和主機應用程序之間的通信。一旦完成,它將執行您爲Office.initialize
定義的功能。
雖然在這方面確實存在一些開銷,但這是非常不可避免的。我們需要在API跨越邊界進行操作之前,連接兩個沉重的沙盒應用程序之間的通信。您的頁面(或函數)需要等待它發生才能開始執行操作(即Office.initialize)。我們還需要確保加載的頁面具有響應性,這就是爲什麼我們使用5秒的超時時間調用Office.initialize。
即使設置開銷,該過程異常快速。一般來說,瓶頸是Web應用程序加載的資源遠遠超過必要的。這是使用單獨的functions.html
的原因之一,它允許你拋出一切,但最低限度(參考office.js
和functions.js
)。
外接命令&自動加載
第一個是在使用外接命令影響如何打開文檔時加載項加載。如果沒有定義加載項命令,Excel將自動重新加載在保存文檔時以前打開的任何加載項。
如果您定義了加載項命令,則此自動加載過程不再發生。 Excel將加載您的加載項命令,但它不會自動啓動加載項本身。
這可以使用新的Office.AutoShowTaskpaneWithDocument
功能進行控制。這裏有一個演練:Automatically open a task pane with a document。此功能在Office版本中尚未廣泛使用,因此它仍然處於預覽狀態。也就是說,你當然可以使用這個功能,直到你的用戶收到一個支持它的版本,它纔會被忽略。
預認證
認證需要在您的外接內完全處理。很遺憾,在加載加載項之前沒有辦法預先驗證用戶身份。就Office而言,如果他們已經加載了你的清單,那麼你就會將加載項命令添加到功能區。您需要在加載項中處理身份驗證,並在需要用戶提供憑證時使用displayDialogAsync
啓動OAUTH工作流程。
感謝馬克爲您提供了迅速而詳盡的答案,現在對我來說更加清晰! –