Javascript в applecript document.querySelectorAll ('input [name $ = _ comment1]'); - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь заполнить все текстовые поля в Safari, где имя заканчивается на _comment1 числом, полученным из диалогового запроса.

Исходный код текстового поля выглядит следующим образом:

<input type="text" maxlength="6" size="6" name="233941_142117_comment1" value="" onKeyUp="return autoTab (this, 6, event);" onChange="disableButtons();">

Хотя поля не заполняются.Есть идеи?

Мой яблочный сценарий:

set query to text returned of (display dialog "Enter Query" default answer "" buttons {"Input", "Cancel"} default button 1)
log "2"
activate application "Safari"
log "3"
tell application "Safari"


log "4"
do JavaScript "

    let x = document.querySelectorAll('input[name$=_comment1]');
    var i;
    for (i = 0; i < x.length; i++) {
        x[i].value = query;
     }

"

end скажи

1 Ответ

0 голосов
/ 07 июня 2018

Я изложил проблемы с вашим сценарием в комментарии, оставленном ниже вашего вопроса.Подводя итог:

① Ваша переменная query определена как переменная AppleScript, но не используется.Затем вы делаете ссылку на переменную в JavaScript с именем query, которая не определена и не имеет значения.

② У вашей команды do JavaScript нет цели в Safari , которая должнавыполнить действие на определенной вкладке или документе.

Решение:

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

Итак, вы определили свою переменную AppleScript query, что я просто собираюсь сделать здесь лениво:

    set query to "blah blah blah"

Базовый фрагмент вашего скрипта, требующий внесения изменений, находится здесь:

    tell application "Safari" to tell ¬
        the front document to do JavaScript ¬
        "x=document.querySelectorAll(\"input[name$='_comment1']\"); " & ¬
        "for(let i of x){ i.value=" & quoted form of query & "; }"

Сам ваш JavaScript полностью в порядке (хотя я немного изменил его в соответствии со своими предпочтениями, чего, возможно, не следовало делать)).Основными моментами здесь является то, что я сказал Safari , что он будет выполнять JavaScript в front document;и что теперь JavaScript использует переменную AppleScript query, с помощью которой он устанавливает значение полей <input>.

Протестировав вариант этого на каком-то произвольном веб-сайте, который я обнаружил, он появилсяуспешно.

Дайте мне знать, как это получается.

...