2017-05-08 27 views
2

我正在研究谷歌電子表格的腳本,情況是當觸發編輯觸發器時會生成一個html對話框模板。向工作表中的編輯器顯示授權彈出界面而不是在谷歌腳本代碼編輯器中手動運行任何功能

ScriptApp.newTrigger('onEditSimulation') 
    .forSpreadsheet(SpreadsheetApp.getActive()) 
    .onEdit() 
    .create(); 

並且對HTML模板,在的onclick什麼綁定按鈕:按鈕

onclick = "google.script.run 
        .withSuccessHandler(sended) 
        .withUserObject(this) 
        .resendSpreadSheet(<?=newMail?>) 

服務器端功能結合之後正常會函數運行它的代碼編輯器和授權過程完成。
電子表格將與其他用戶共享,但上述方式對我的目標用戶來說實際上並不友好並且流暢,我強烈希望避免這種情況。是否有任何解決方案使授權彈出只顯示在工作表界面?

+0

如果你調用一個函數表'onEdit'他們沒有身份驗證,他們會被推向驗證窗口默認。 – Brian

+0

@Brian不幸的是installabe觸發器在我的情況下是必需的,在我的應用程序中有一些API調用像來自potection類的'addEditor'。 – Carr

回答

1

您可以實現一個小腳本,要求「非授權用戶」手動運行菜單選項,以觸發授權過程。

該功能只能運行一次。下面

代碼示例:

function onOpen() { 
    if(! PropertiesService.getUserProperties().getProperty("authorized")){ 
    SpreadsheetApp.getUi().createMenu('Authorize').addItem('Authorize',authorize).addToUi(); 
    var ui = HtmlService.createTemplateFromFile('index') 
    .evaluate() 
    .setSandboxMode(HtmlService.SandboxMode.IFRAME) 
    .setTitle('Authorization request'); 
    SpreadsheetApp.getUi().showModelessDialog(ui,'Authorization request'); 
    } 
} 

function authorize(){ 
    PropertiesService.getUserProperties().setProperty("authorized", "done"); 
} 

的index.html:

<html> 
    <head> 
    <base target="_top"> 
    </head> 
    <body> 
Please select the "Authorize " option from the menu<br><br> 
<input type="button" value="then close this window" 
    onclick="google.script.host.close()" /> 
</body> 
</html> 
+0

@insas,謝謝你的回答,這似乎是我想達到的唯一好方法。你能解釋更多關於'setSandboxMode()'的用途嗎?我已經多次查閱了[文檔](https://developers.google.com/apps-script/reference/html/html-output#setSandboxMode(SandboxMode)),但缺乏經驗來了解真正的效果會造成什麼。如果你可以更新這個部分來回答^^「再次感謝! – Carr

+1

sandBoxMode確實沒有必要了,請原諒我使用過它,但它有點舊習慣......前段時間的HTML服務有2個其他模式:native和模擬使用一種名爲CAJA的「代碼翻譯器」,旨在防止谷歌應用程序腳本代碼中的惡意軟件,但現在所有這些都是歷史,您可以簡單地忽略這一點!順便說一句,謝謝接受。 –

相關問題