El siguiente script se usa para hacer clic en un botón para cargar una fecha en nuestro sitio web y luego obtener el valor de esa fecha.
Luego debería devolver ese valor de fecha, que se usará en algunas comparaciones más adelante. Sin embargo, cuando registro doJavaStuff y emptyDate, ambos regresan como "(*missing value *)". El cuadro de diálogo de visualización para la fecha vacía también devuelve "msng".
¿Por qué no se devuelve el resultado de do JavaScript?
Revisé varios artículos y fuentes y probé varias sugerencias, pero nada funcionó. Por ejemplo, intenté configurar la segunda línea de do JavaScript en una variable y devolver esa variable, pero eso de alguna manera hizo que la variable AppleScript no estuviera definida.
Soy relativamente nuevo en AppleScript, así que tal vez me esté perdiendo algo obvio.
global emptyDue, serviceDate, doJavaStuff set emptyDue to " " set doJavaStuff to " " set serviceDate to "2021-11-30" on isEmptyDue() tell application "Safari" to tell document 1 set doJavaStuff to do JavaScript "document.getElementById('trgUseNext').click(); #clicks button to load date. document.getElementById('inspDate').value;" --gets the value of date return doJavaStuff end tell end isEmptyDue set emptyDate to isEmptyDue() display dialog emptyDate log doJavaStuff log emptyDatePude duplicar su problema usando un elemento que está en esta página de StackOverFlow ( post-id ), usando esta versión simplificada de su secuencia de comandos:
on isEmptyDue() tell application "Safari" to tell document 1 set doJavaStuff to do JavaScript "document.getElementById('post-id').value" return doJavaStuff end tell end isEmptyDue set emptyDate to isEmptyDue() display dialog emptyDateEl valor de retorno es, como notó, "msng".
El problema parece ser que AppleScript está perfectamente feliz de tener nada más que texto citado en su propia línea, y también está perfectamente feliz de ejecutar do JavaScript sin script. Es decir, el código tal como lo presentó no ejecuta ningún JavaScript: llama a do JavaScript sin nada, y luego la siguiente línea es una cadena de texto que AppleScript ignora.
Si combino las líneas para que sean una sola línea en lugar de dos, display dialog emptyDate muestra el valor esperado de 8 dígitos del post-id del elemento en esta página de StackOverFlow (que se encuentra al ver la fuente).
on isEmptyDue() tell application "Safari" to tell document 1 set doJavaStuff to do JavaScript "document.getElementById('post-id').value" return doJavaStuff end tell end isEmptyDue set emptyDate to isEmptyDue() display dialog emptyDate Eso fue extrañamente difícil de rastrear porque ninguno de los "errores" proporcionó un error obvio: do JavaScript sin ningún texto no es un error; en cambio, devuelve una cadena críptica, "msng", que sospecho pero no sé significa "faltante", y una cadena por sí sola en una línea tampoco es un error. Entonces parece que está haciendo algo y no funciona, en lugar de no hacer nada y no funcionar.