О действии «Выполнить код JavaScript на веб-странице» в программе «Быстрые команды»
Практически на всех веб-страницах используется JavaScript — язык программирования, который позволяет создавать динамические эффекты в веб-браузерах, включая анимации, интерактивные меню, воспроизведение видео и др. Обычно код JavaScript не отображается на экране при просмотре веб-сайтов. Однако, создав быструю команду с действием «Выполнить код JavaScript на веб-странице» и запустив эту команду из программы Safari, можно управлять кодом JavaScript на веб-странице.
Быстрые команды, которые запускают пользовательский код JavaScript на веб-странице, очень широко используются. Скажем, можно создать быстрые команды, которые получают определенные данные с веб-страницы и затем передают эти данные в другое задание — например, можно получить расписание для занятий и добавить его в программу «Календарь» или экспортировать список членов группы в Facebook и вставить эти данные в таблицу.
Также можно создать быстрые команды, которые дают возможность модифицировать веб-страницу — например, менять шрифт текста или скорость воспроизведения видео на ней.
Информацию об использовании быстрых команд, которые выполняют код JavaScript на веб-странице, см. в разделе Использование действия «Выполнить код JavaScript на веб-странице» в программе «Быстрые команды».
О получении данных с веб-страниц
Действие «Выполнить код JavaScript на веб-странице» позволяет получать данные с веб-страницы, захватывая все элементы, которые соответствуют определенным критериям, и затем обрабатывая эти элементы в соотвествии с заданием (или передавая их дальше).
Например, чтобы создать список всех изображений на веб-странице, используйте код:
var elements = document.querySelectorAll("img");
В другом примере, чтобы получить все объекты класса «post», используйте код:
var elements = document.querySelectorAll(".post");
После создания списка NodeList можно переходить между его элементами (для дополнительного отбора элементов или добавления их в структуру данных) с помощью следующего кода:
var elements = ...;
for (let element of elements) {
// ...
}
Дополнительные сведения о запросе результатов с веб-страниц см. на https://developer.mozilla.org/Selectors и https://developer.mozilla.org/SelectorAll.
Входные данные для действия «Выполнить код JavaScript на веб-странице»
В качестве входных данных действию «Выполнить код JavaScript на веб-странице» должна передаваться активная веб-страница Safari, то есть необходимо запускать быструю команду из активного расширения Быстрых команд на странице экспорта (а именно — из Safari, SFSafariViewController или ASWebAuthenticationSession).
Когда быстрая команда запускается со страницы экспорта, входные данные из программы Safari передаются в первое действие Вашей быстрой команды.
Хотя входные данные для действия «Выполнить код JavaScript на веб-странице» должны представлять собой веб-страницу Safari, в действие можно вставить дополнительные данные, используя волшебные переменные. Например, следующая быстрая команда содержит действие «Выполнить код JavaScript на веб-странице», которое модифицирует видео на веб-странице. Скорость воспроизведения видео контролируется переменной Speed.
Совет. Быстрая команда «Изменение скорости видео» доступна для просмотра и загрузки в Галерее.
Если действие «Выполнить код JavaScript на веб-странице» не является первым действием в команде, при запуске быстрой команды появится сообщение об ошибке.
Чтобы исправить это, можно добавить действие «Получить переменную», а его параметром задать веб-страницу Safari и передать ее содержимое в действие «Выполнить код JavaScript на веб-странице».
Информацию о запуске быстрых команд из Safari см. в разделе Настройка и запуск быстрых команд из другой программы.
Выходные данные для действия «Выполнить код JavaScript на веб-странице»
Чтобы получить данные в результате, нужно вызвать обработчик завершения в JavaScript, например completion(result)
. Поскольку JavaScript обычно используется с асинхронными шаблонами, вызов также является асинхронным. Это дает возможность асинхронно завершить действие. Пример кода:
window.setTimeout(function() {
completion(true);
}, 1000);
Выходные данные для действия «Выполнить код JavaScript на веб-странице» могут быть любым типом данных JSON, в том числе:
строка
число
логическое значение (истина или ложь)
массив (содержащий любой другой тип JSON)
словарь (содержащий любой другой тип JSON)
нулевое значение (null)
неопределенное значение (undefined)
Дополнительную информацию о JSON см. в разделе Использование JSON в программе «Быстрые команды».
Программа «Быстрые команды» автоматически кодирует и декодирует возвращаемое значение для обеспечения корректной передачи данных между JavaScript и программой «Быстрые команды». Это означает, что Вам не нужно выполнять вызов JSON.stringify(result)
перед вызовом обработчика завершения.
Поскольку возвращенное значение является типом данных JSON, некоторые возвращенные значения могут не сработать. Например, функция или узел Node при кодировании в JSON могут не дать хорошего результата. В таком случае рекомендуется создать массив или словарь, который содержит нужные Вам значения, совместимые с JSON.
Дополнительные сведения об узлах Nodes см. на https://developer.mozilla.org/Node; подробнее о функциях см. на https://developer.mozilla.org/Functions.
Примечание. Так как объект в JavaScript является просто словарем, базовые объекты хорошо конвертируются в типы данных JSON.
Совет. Если не нужно возвращать никакие данные от действия «Выполнить код JavaScript на веб-странице», можно вызвать completion()
без аргумента в функции (так как поддерживаются выходные данные типа undefined
). Это аналогично вызову функции completion(undefined)
.
Ограничение по времени для действия «Выполнить код JavaScript на веб-странице»
Так же как и любое другое расширение JavaScript для Safari, действие «Выполнить код JavaScript на веб-странице» имеет ограничение по времени и должно быть завершено как можно быстрее. Код JavaScript, использующий синхронные функции, может не завершиться вовремя. Примеры синхронных функций:
window.alert()
window.prompt()
window.confirm()
Время ожидания продолжительностью в несколько секунд — например:
window.setTimeout(function() { completion(); }, 5000);
Если Ваш код JavaScript превысит допускаемое время ожидания, быструю команду не удастся завершить, и в ходе ее выполнения отобразится сообщение об ошибке «Истекло время ожидания JavaScript».
Обработка синтаксических ошибок и ошибок при выполнении
Для написания кода JavaScript в действии «Выполнить код JavaScript на веб-странице» можно использовать любой синтаксис, который поддерживается в Safari. iOS 12 поддерживает синтаксис JavaScript ECMA 6, в том числе циклы for of
и оператор let
.
В программе «Быстрые команды» действие «Выполнить код JavaScript на веб-странице» позволяет проверить синтаксис, чтобы обнаружить грубые ошибки еще до запуска быстрой команды из расширения Safari.
При вводе скрипта в текстовое поле синтаксические подсказки помогают убедиться, что в коде JavaScript нет ошибок. Например, если не хватает кавычек в конце строки, весь последующий текст после этой строки будет выделен.
Если синтаксис скрипта правильный, но возникает ошибка при выполнении, действие «Выполнить код JavaScript на веб-странице» определяет и показывает исключения. Например, если в скрипте указана несуществующая переменная или функция (такая как shortcuts.completion()
), при выполнении появится ошибка.
Конфиденциальность и безопасность
Если разрешить быстрой команде выполнение Javascript на веб-странице, эта быстрая команда может получить доступ к любой информации на этой веб-странице, в том числе — к личным данным. В программе «Быстрые команды» приняты некоторые меры для обеспечения безопасного запуска быстрых команд JavaScript.
При запуске быстрой команды, содержащей действие «Выполнить код JavaScript на веб-странице», появляется запрос с информацией о том, что данная быстрая команда собирается взаимодействовать с веб-страницей. Это означает, что быстрая команда может получить доступ к конфиденциальным данным на веб-странице, таким как пароли, номера телефонов или данные кредитных карт.
Когда Вы коснетесь «Разрешить», быстрая команда продолжит выполняться на указанной веб-странице. Если запустить ту же команду на той же веб-странице еще раз, повторный запрос в программе «Быстрые команды» не появится. Это разрешение сохраняется для отдельных веб-страниц и быстрых команд и не распространяется на остальные команды и страницы.
Если дать быстрой команде разрешение на доступ к веб-странице, программа «Быстрые команды» предпринимает дополнительные меры для защиты Вас от потенциально вредоносных скриптов, периодически загружая обновленные определения вредоносного ПО. Перед началом взаимодействия с веб-страницей программа «Быстрые команды» проверяет код JavaScript, а затем выполняет сверку с данными определений вредоносного ПО. По результатам проверки программа «Быстрые команды» получает указания разрешить выполнение скрипта, запретить его или вывести на экран дополнительный запрос перед запуском этой быстрой команды.
Примечание. Эта проверка выполняется на Вашем устройстве — Ваш код JavaScript (а именно — код, отображаемый в текстовом поле действия «Выполнить код Javascript на веб-странице») не отправляется для анализа на внешние сервера.
Если быстрая команда не прошла проверку, появится сообщение с пояснениями.
Важно! Никогда не запускайте быстрые команды, которые могут содержать непроверенный код Javascript.