Как заставить связанный с Google Sheets code.js читать и действовать на JavaScript из неконтролируемого удаленного файла .js? - PullRequest
1 голос
/ 28 мая 2019

У меня есть Google Sheets на диске GSuite, которым я владею. Этот Google Sheets имеет связанный файл сценария code.js. У меня также есть удаленный файл .js, который содержит функцию, которую я хочу выполнить на своем листе (в обычной ситуации эта функция просто находится в файле code.js).

Я создал изображения кнопок на листе, которые запускают сценарии в файле code.js. Когда я нажимаю кнопку, мой скрипт code.js выполняется успешно:

  • кнопка запускает скрипт code.js, который извлекает удаленный js-файл через URL-адрес и сохраняет его в переменной (этот удаленный файл также может быть просто текстовым файлом, но для контроля моего OCD я назвал его .js)
  • Я использую console.log(variable), чтобы подтвердить, что действительно был получен весь файл .js.
  • Я использую eval(variable), но ничего не происходит

Если я вставлю вывод console.log(variable) непосредственно в файл code.js, он будет работать как положено.

Является ли eval() неправильным вызовом? Или это не так сильно, как я надеюсь?

function countStuffButton() { //Counts the number of current stuffs
    var url = "http://my.website/js/countStuff.js";
    var javascript = UrlFetchApp.fetch(url).getContentText();
    console.log(javascript);
    eval(javascript);  
}

console.log, что я получаю обратно:

function countStuff() {
    // bunch of code that works when paste directly into code.js
}

Я надеюсь / ожидаю, что я смогу сохранить функцию JavaScript на сервере в файле .js, а затем извлечь содержимое функции, которая будет обрабатываться локально, в связанном сценарии code.js моих таблиц Google, в результате чего в Google Sheets, который является чистым «интерфейсным» скриптом создания и HTML-вызовами файлов, которыми я полностью владею и управляю на своем сервере.

1 Ответ

1 голос
/ 28 мая 2019

Функция eval(code), которую вы знаете, выполняет код JavaScript из строки.

Однако code должна быть строкой, содержащей выражение JavaScript для оценки или операторы, которые должны быть выполнены .

В вашем случае переменная javascript содержит объявление функции countStuff.

Объявления функций - это операторы, которые выполняют действие по созданию переменной, чьизначение соответствует значению функции.

Чтобы исправить это, вы можете:

  1. Измените вашу удаленную функцию countStuff, чтобы она стала выражением немедленного вызова функции :
function countStuff() {
//bunch of code that works when paste directly into code.js
}()
Вызовите функцию самостоятельно eval('new ' + javascript + '()')

Чтобы понять этот второй сценарий и зачем нужен новый, взгляните на этот ответ .

countStuff становится доступным, поэтому вы также можете вызывать его после выполнения eval (), например countStuff()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...