Почему eval не является функцией для других пользователей

#api #google-apps-script #google-sheets

Вопрос:

Мне нужна кликабельная кнопка в моем листе для моих пользователей на мобильных устройствах.

Я принял помощь от https://medium.com/macadamscripts/create-button-in-google-sheets-mobile-2979579025ef

Я сделал выпадающее меню в столбце A с проверкой «Call_Customer» или «Call_Alt_No». Пользователям разрешено редактировать только столбец A.

и сделал следующие функции

 //
//
function on_Edit(e) {
  //if (e.range.getA1Notation() == 'A1') {
    if (/^w $/.test(e.value)) {        
      eval(e.value)();
      e.range.clear();
      //e.range.setValue("Calling");
    }
  //}
}
//
//
function Call_Customer(){
  var ss=SpreadsheetApp.getActive();
  var sht=ss.getActiveSheet()
  var cr=sht.getActiveCell().getRow();
  var cu=sht.getRange("K" cr).getValue();
  var ag=sht.getRange("J" cr).getValue();
  const url = 'https://api.servetel.in/v1/click_to_call'
  const options = {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    Authorization: 'xxx',
    'Content-Type': 'application/json'
  },
  payload: JSON.stringify({agent_number: ag, destination_number: cu})
  }
  try {
    const res = UrlFetchApp.fetch(url, options)
    Logger.log(JSON.parse(res));
    //ss.toast(JSON.parse(res));
  }
  catch (e) {
    Logger.log('error'   e);
    //ss.toast('error'   e);
  }
}
//
//
function Call_Alt_No(){
  var ss=SpreadsheetApp.getActive();
  var sht=ss.getActiveSheet()
  var cr=sht.getActiveCell().getRow();
  var cu=sht.getRange("I" cr).getValue();
  var ag=sht.getRange("J" cr).getValue();
  const url = 'https://api.servetel.in/v1/click_to_call'
  const options = {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    Authorization: 'xxxx',
    'Content-Type': 'application/json'
  },
  payload: JSON.stringify({agent_number: ag, destination_number: cu})
  }
  try {
    const res = UrlFetchApp.fetch(url, options)
    //console.log(JSON.parse(res))
    //Browser.msgBox("Call Started");
  }
  catch (e) {
    //console.error('error'   e);
    //Browser.msgBox("Call failed");
  }
}
 

Я сделал устанавливаемый триггер, так как простой триггер не мог вызвать внешнюю службу.

Функция Call_Customer хорошо работает на моем мобильном телефоне — я его владелец. Но это выдает ошибку для других редакторов листа на их мобильном телефоне (ошибка доступна в журнале триггеров).

Ошибка типа: eval(…) не является функцией в on_Edit(Код:33:20)

Есть ли какие-либо ограничения для редакторов на использование eval? Должны ли они давать какое-либо разрешение?

Комментарии:

1. Используют ли другие пользователи ваш код или делают его копию? Имейте в виду, что eval не поддерживается в старой среде выполнения (Rhino), поэтому он не будет работать для пользователей, у которых не включена версия v8.