2013-08-22 110 views
1

我正在使用Apps腳本中的Google Docs API創建拼寫檢查程序(只是擴展了Google文檔功能的腳本),並且我不想做這個服務可供用戶下載爲Web應用程序。問題是,當我在腳本編輯器中創建了我的(容器綁定的)腳本時,它僅在我創建它的Google文檔中可用 - 也就是說,如果我打開一個新文檔,則無法使用該腳本。將容器綁定的Google Apps腳本部署爲Web應用程序

如果我「部署爲Web應用程序」,將其提供給所有人並粘貼給定的URL,則會收到一條錯誤消息,指出該腳本需要一個名爲doGet()的函數,該函數不在我的腳本中。

我該如何發佈我的腳本作爲常規的Web應用程序?

回答

0

答案在你的問題中:腳本的主要功能(構建UI的主要功能)必須被稱爲doGet()(這是任何GAS webapp的常規入口點,當你打開webapp網址)...但我恐怕這不會解決你的問題...

即使我不知道你的腳本中是什麼以及你如何寫它,我猜它指的是文檔您將它定義爲「活動文檔」,並且這可能是最重要的問題,因爲webapp沒有附加文檔。

除此之外,拼寫檢查程序如何作爲獨立應用程序工作?你能更清楚地解釋你想做什麼嗎?

+0

當然可以! 我想要創建一個應用程序來檢索一個單詞(或多個),然後通過XHR(UrlFetchApp)將該單詞發送到服務器,在那裏檢查拼寫錯誤/單詞預測,然後作爲JSON對象返回 - 這部分已經被照顧了。 我想要做的事情是讓腳本將自己綁定到用戶正在查看的任何文檔,並且在Google文檔中具有相同的功能。 任何想法? – user2663983

1

我將繼續創建兩個腳本: 核心功能將作爲Web應用程序部署,並且簡單的容器綁定腳本將提供調用Web應用程序的接口。

由於應用沒有被綁定到一個文檔網頁可能要遵循這樣的方法:當你部署應用程序,你會得到一個鏈接,讓您訪問的功能

function doGet(e){ 
    if(e.parameter.docId){ 
     doStuff(DocumentApp.openById(e.parameter.docId)); 
    } 
} 

現在。

從您可以添加一些UI(例如,在側板的錨元素)鏈接到Web應用程序使用適當的參數

ScriptApp.getService().getUrl() + "?docId=" + DocumentApp.getActiveDocument().getId() 

或使用UrlFetchApp得到的結果容器綁定腳本並在UI中顯示它們。

不幸的是,這與在所有文檔中自動添加功能不同,而是在每個要添加功能的文檔中僅安裝相對輕量級的鉤子,而不是完整的腳本。 我不知道有任何方法可以實現這一點。請注意,製作文檔副本時,副本將包含其所有腳本,以便爲需要附加功能的文檔創建模板。儘管如果你想混合和匹配多個腳本,這可能會變得更加棘手。

我的方法的優點是,如果您修改了核心功能,則所有文檔都可立即使用該更改,無需更新其腳本。另一方面,如果容器腳本需要與UI進行大量交互,它可能會變得複雜並降低將其分離爲兩個腳本的實用性。

相關問題