2017-11-18 10 views
0

I AppleScript 편집기에서 다음 코드 단편을 사용하여 JavaScript를 사용할 수 없습니다.do JavaScript를 사용하여 AppleScript에서 JavaScript를 사용할 수 없습니다. "document.getElementById ('theID'). value = 'item1';"

do JavaScript "document.getElementById ('theID'). value = 'item1';" 첫 번째 창 다른 사람이 일을하는 데 어떤 이유

tell application "Google Chrome" 
    open location "https://www.randomwebsite.com" 
    set theScript to "document.getElementById('term_input_id').value ='Spring 2015';" 
do JavaScript theScript in current tab of first window 
end tell 

하지만 노트의 현재 탭에서, 이것은 내가 전화하고 싶은 정확한 자바 스크립트 함수입니다!

누구나 내가 구문 오류를 제거 할 수있는 방법을 알고 있습니다. 예상되는 끝의 줄 등이 있지만 식별자를 발견했습니다. (AppleScript는 위의 코드에서 JavaScript라는 단어를 강조 표시합니다.)

답변

0

당신은 "어떤 이유로 다른 사람들이이 작업을 할 수 있습니다."라고 말했지만 "구문 오류가 예상됩니다. 끝점 등이 있지만 식별자를 발견했습니다.", 그래서 분명히 Script Editor에서 오류없이 컴파일 할 수 없다면, 그 누구도 그 코드를 Google 크롬에서 작동시킬 방법이 절대적으로 없습니다!

  1. 사파리가 아닌 구글 크롬에 대한 인 do JavaScript구문. Chrome의 경우 execute javascript이지만 변경하면 코드이 수정되지 않습니다. 그런 다음 "구문 오류가 예상됩니다. 줄의 끝 등이 있지만 클래스 이름을 찾았습니다." tab 하이라이트.
  2. Google 크롬의 AppleScript 사전을 보면 current tab을 지원하지 않으며 active tab이고 수정하면 코드가 수정되지 않습니다. 그러면 'AppleScript 오류'로 오류가 발생합니다. Google 크롬에 오류가 발생했습니다 : 응용 프로그램 'Google 크롬'을 유형 지정자로 만들 수 없습니다. ' 하이라이트는 execute javascript theScript in active tab of front window입니다.

그래서 오류가 발생하지 않고 컴파일하려면 무엇이 필요합니까? 다음은 수정 된 코드으로 원래 코드에서 오류없이 컴파일해야합니다.

tell application "Google Chrome" 
    open location "https://www.randomwebsite.com" 
    set theScript to "document.getElementById('term_input_id').value = 'Spring 2015';" 
    execute active tab of front window javascript theScript 
end tell 

그러나, 그것은 오류없이 컴파일해서 반드시이 문제없이 작동합니다 의미하지 않는다!

open location "https://www.randomwebsite.com"명령 실행이 완료 로딩 때문에 스크립트 실패 할 수 있기 위하여 대상 웹 페이지에 관계없이 실행할 수 있습니다 다음 코드의 라인.

당신은 그것이 스크립트의 나머지를 진행하기 전에 완료 open location ...명령 기다릴 적절한 코드를 추가해야합니다.

인터넷 검색, 작업이 완료된로드, 으로이 사이트가 사이트에서 작동하지 않을 수 있습니다 작동하지만 하나 개의 주어진 방법이 페이지를 기다릴 다양한 방법을 찾을 수 있습니다. 따라서 대상 웹 사이트에서 작동하는 것을 테스트해야합니다.구글 크롬에서 작동해야하는 일반적인 방법

하나는 :

repeat until (loading of active tab of front window is false) 
    delay 0.2 -- # The value of the 'delay' command may be adjusted as appropriate. 
end repeat 

그래서, 당신의 재 코드 지금과 같이 :

tell application "Google Chrome" 
    open location "https://www.randomwebsite.com" 
    repeat until (loading of active tab of front window is false) 
     delay 0.2 
    end repeat 
    set theScript to "document.getElementById('term_input_id').value = 'Spring 2015';" 
    execute active tab of front window javascript theScript 
end tell 

물론 이것은 것을 의미하지 않는다 모든 것이 문제없이 작동 할 것이며 필요한 오류 검사와 처리를 추가 할 의무가 있습니다.

+0

참고 : '첫 번째 창'을 사용하는 동안 개인 환경 설정으로 '프론트 윈도우'로 변경했지만 예제 코드를 테스트하는 것과 상관없이 동일한 결과를 산출합니다. – user3439894