Introducción a la acción “Ejecutar JavaScript en la página web” en Atajos en el iPhone o el iPad
Casi todas las páginas web están programadas con JavaScript, un lenguaje de programación que permite crear efectos dinámicos en los navegadores web, como animaciones, menús interactivos o reproducciones de vídeo. Por lo general, el código JavaScript no es visible en un sitio web. Sin embargo, si creas un atajo que contenga la acción “Ejecutar JavaScript en la página web” y lo ejecutas desde la app Safari, puedes controlar el código JavaScript de una página web.
Los atajos para ejecutar tu código JavaScript personalizado en una página web tiene múltiples aplicaciones. Por ejemplo, puedes crear atajos para recuperar datos específicos de una página web e incorporar dichos datos a una tarea, como extraer los horarios de una clase y añadirlos a la app Calendario, o exportar los datos de los miembros de un grupo de una red social y añadir esos datos a una hoja de cálculo.
Asimismo, puedes crear atajos que te permitan modificar una página web, como cambiar el tipo de letra del texto de la página o la velocidad a la que se reproduce un vídeo. Para poder ejecutar JavaScript desde un atajo, primero tendrás que activar el ajuste. Consulta Ajustes avanzados de privacidad y seguridad en Atajos en el iPhone o el iPad.
Para obtener información sobre cómo usar atajos que ejecuten JavaScript en una página web, consulta Usar la acción “Ejecutar JavaScript en la página web” en Atajos en el iPhone o el iPad.
Acerca de la recuperación de los datos de una página web
La acción “Ejecutar JavaScript en la página web” permite recuperar datos de una página web seleccionando los elementos que cumplan determinados criterios y pasar por ellos repetidamente para realizar una tarea con los datos (o para inspeccionar mejor los elementos).
Por ejemplo, para crear una lista de cada una de las imágenes de una página web, escribe:
var elements = document.querySelectorAll("img");
Para recuperar todos los elementos con la clase “post”, escribe:
var elements = document.querySelectorAll(".post");
Una vez creada la lista NodeList, puedes pasar por los elementos repetidamente (para filtrarlos más o añadirlos a una estructura de datos) escribiendo algo como:
var elements = ...;
for (let element of elements) {
// ...
}
Para obtener más información sobre cómo consultar los resultados de páginas web, consulta https://developer.mozilla.org/Selectors y https://developer.mozilla.org/SelectorAll.
Entrada de la acción “Ejecutar JavaScript en la página web”
La entrada a la acción “Ejecutar JavaScript en la página web” debe ser una página web activa de Safari, lo que significa que debes ejecutar el atajo desde la hoja para compartir (concretamente desde Safari, SFSafariViewController o ASWebAuthenticationSession).
Cuando un atajo se ejecuta desde la hoja para compartir, la entrada desde la app Safari se transfiere a la primera acción del atajo.
Aunque la entrada a la acción “Ejecutar JavaScript en la página web” debe ser una página web de Safari, puedes insertar datos adicionales en la acción mediante variables mágicas. Por ejemplo, el atajo Cambiar velocidad de vídeo (disponible en la galería) contiene una acción, llamada “Ejecutar JavaScript en la página web”, que modifica un vídeo incluido en una página web. La velocidad de reproducción del vídeo se controla mediante la variable de velocidad.
Para obtener información sobre cómo ejecutar atajos desde Safari, consulta Ejecutar un atajo desde otra app en el iPhone o el iPad.
Salida de la acción “Ejecutar JavaScript en la página web”
Para devolver datos, debes llamar al controlador de finalización de JavaScript, como completion(result)
. Puesto que JavaScript se suele usar con patrones asíncronos, la llamada no está sincronizada intencionadamente. De esta forma, se puede terminar la acción de forma asíncrona. Por ejemplo, el código siguiente es válido:
window.setTimeout(function() {
completion(true);
}, 1000);
La salida de la acción “Ejecutar JavaScript en la página web” es cualquier tipo de dato JSON válido, incluidos los siguientes:
string (cadena);
number (número);
boolean (booleano), verdadero o falso;
array (matriz), que contiene cualquier otro tipo de dato JSON válido;
dictionary (diccionario), que contiene cualquier otro tipo de dato JSON válido;
null (sin objeto)
undefined (sin definir)
Entre bastidores, Atajos codifica y descodifica automáticamente los valores devueltos para establecer comunicación entre el código JavaScript y la app Atajos. Esto significa que no necesitas llamar a JSON.stringify(result)
antes de llamar al controlador de finalización.
Al obtener un valor JSON, algunos valores devueltos no funcionarán bien. Por ejemplo, una función o nodo no tendrá una representación útil codificada en JSON. En ese caso, se recomienda crear una matriz o diccionario que contenga los valores compatibles con JSON que necesites.
Nota: Puesto que un objeto en JavaScript es simplemente un diccionario, los objetos básicos se convierten bien a JSON.
Si no quieres que la acción “Ejecutar JavaScript en la página web” devuelva ningún dato, puedes llamar a completion()
sin argumentos en la función, ya que undefined
es una salida válida. Es lo mismo que llamar a completion(undefined)
.
Para obtener más información sobre JSON, consulta Introducción al uso de JSON en Atajos en el iPhone y el iPad.
Para obtener más información sobre Nodes, consulta https://developer.mozilla.org/Node.
Para obtener más información sobre las funciones, consulta https://developer.mozilla.org/Functions.
Límite de tiempo de la acción “Ejecutar JavaScript en la página web”
Como sucede en todas las extensiones JavaScript de Safari, la acción “Ejecutar JavaScript en la página web” está supeditada a un límite de tiempo y debe completarse lo más rápido posible. Si el código JavaScript usa funciones asíncronas, incluidas las siguientes, podría no completarse a tiempo:
window.alert()
window.prompt()
window.confirm()
Tiempos límite de espera que duran varios segundos, como en este caso:
window.setTimeout(function() { completion(); }, 5000);
Si tu JavaScript supera el límite de tiempo, el atajo no se completará correctamente y aparecerá un mensaje de error de tiempo límite de espera agotado de JavaScript al ejecutarlo.
Gestión de errores de tiempo de ejecución y sintaxis
Puedes usar cualquier sintaxis compatible con Safari para escribir código JavaScript en la acción “Ejecutar JavaScript en la página web”.
En la app Atajos, la acción “Ejecutar JavaScript en la página web” ayuda a detectar errores mediante una comprobación de sintaxis básica antes de ejecutar el atajo desde la extensión de Safari.
A medida que se introduce el script en el campo de texto, el resaltado de la sintaxis ayuda a garantizar que lo que se escribe en JavaScript es válido. Por ejemplo, si te olvidas de incluir las comillas al final de una cadena, se resaltará todo el texto que hay a continuación de dicha cadena.
Si la sintaxis del script es válida, pero contiene un error de tiempo de ejecución, la acción “Ejecutar JavaScript en la página web” detecta y muestra las excepciones. Por ejemplo, si el script hace referencia a una variable o función que no existe, como shortcuts.completion()
, se mostrará un error de tiempo de ejecución.