2013-10-09 40 views
1

我有一個帶有關聯的容器綁定腳本的模板文檔。該腳本不需要認證 - 它只是在Google Docs UI中創建一個自定義菜單。Google文檔:onOpen()不會在複製的文檔+腳本中執行

模板文檔歸我的GAE網絡應用程序所有。通過Web應用程序創建新文檔使用以下過程:

  1. 在Web應用程序的服務帳戶中複製模板。
  2. 用用戶提供的內容更新文檔的media_body;
  3. 插入權限將用戶設置爲文檔所有者;
  4. 刪除與Web應用程序服務帳戶關聯的權限,以便文檔對創建它的用戶是私有的。

此過程按預期工作,除了在腳本中執行onOpen()函數。該腳本與文檔一起成功複製,並且可以手動運行onOpen()(使用'腳本管理器'),但在打開文檔時它不會自動執行。刪除步驟4解決了這個問題,但是這使得文檔'不夠私人'。

爲什麼onOpen()在複製的私人文檔中執行?

+0

這很奇特。你是說如果一個服務帳戶是電子表格上的協作者,那麼'onOpen'不會運行?你可以運行一些額外的測試,比如在'onOpen'正常運行的文檔上添加這個服務帳戶作爲協作者嗎? –

+0

不,反其道而行之:在將服務帳戶作爲協作者移除後,'onOpen()'不會運行。 – rphv

回答

0

它是因爲原始的onOpen以原始擁有者權限運行。當您從權限中刪除該用戶時,它將無法使用這些保存的憑據。 要麼不刪除它,要麼更好,但不要改變所有權,只是與用戶分享。由於您將擁有所有創建的系統文件,因此這也會給您更多的控制權。

+0

此選項不強制創建文檔的隱私。 – rphv

+0

您將爲此保留一個系統帳戶。你不想支持你想支持的腳本,因爲腳本總是在授權帳戶上運行(通過發佈或批准oauth範圍)。如果您從編輯者中移除已批准的帳戶,那麼Google將不會在尚未批准腳本的用戶的帳戶上運行onOpen。 –

+0

對於不訪問用戶數據的腳本(例如一個添加自定義菜單的腳本? – rphv