AppleScript의 키보드 단축키는 환경 설정 창이 열려있을 때만 작동합니다


2

Chrome에서 실행되는 Youtube 비디오를 재생 / 일시 정지하기 위해이 AppleScript를 작성했습니다.

on run {input, parameters}

    tell application "Google Chrome" to (tabs of window 1 whose URL contains "youtube")
    set youtubeTabs to item 1 of the result
    tell application "Google Chrome"
        execute youtubeTabs javascript "document.getElementsByClassName('ytp-play-button ytp-button')[0].click();"
    end tell

    return input
end run

에서 실행할 때 제대로 작동합니다 Automator. 서비스를 저장하고 서비스 를 실행하기 위해 키보드 단축키 + J를 추가했습니다 . 또한 설정에 추가 Automator했습니다 Accessibility( 이 SO 답변에 따름 ).

이제 이상한 부분이 있습니다. System Preferences창에 포커스 가 있으면 작동합니다 . 닫거나 다른 창으로 전환하면 바로 가기가 작동하지 않습니다. System Preferences창에 바로 가기에 해당 하는 메뉴 항목 이 있고 바로 가기를 누를 때 트리거 되기 때문에 작동하는 것으로 나타났습니다 .

도와주세요. 미리 감사드립니다.


다른 응용 프로그램에 이미 존재하는 바로 가기이므로 다른 바로 가기를 사용하십시오. ( Preview, Script Editor, Mail, TextEdit, iTunes, Safari, Finder, Terminal, Microsoft Word, TextWrangler, Automator등)
jackjr300

답변:


1

wch1zpink의 답변에 대한 나의 의견에서 언급했듯이 "서비스 설정이 올바른지 확인하고 바로 가기 키 시퀀스를 다른 사람이 사용하지 않는 것이 첫 번째 단계"이며 그 후 jackjr300이 그의 의견에 언급했습니다. 시스템이나 응용 프로그램의 다른 곳에서 사용하지 않는 키보드 바로 가기를 변경하면 (즉, '서비스 가 응용 프로그램 에서 입력 을 받지 못합니다 '가 설정된 경우), 시스템 환경 설정 이 열려 있는지 여부에 관계없이 사용할 수 있습니다 코드 , 그대로 상기 OP와 충돌하지 않는 핵심 서열이다.

또한 Automator 에서 실행 하거나 시스템 환경 설정 > 키보드 > 바로 가기 > 서비스 > 에서 충돌이없는 키보드 단축키를 사용하는 경우 시스템 환경 설정 > 보안 및 개인 정보 > 개인 정보 보호 > 이 특정 사용 사례에 대한 접근성 에서 응용 프로그램을 설정할 필요가 없습니다. (서비스를 제공 한 이름) .

문제를 해결하려면 시스템 및 응용 프로그램의 다른 곳에 아직 할당되지 않은 바로 가기 키를 사용해야합니다.

이미 사용되고 있지 않은 키 조합이 거의없는 경우 3-4 개의 키 시퀀스를 사용해야 할 수도 있습니다.


참고 로이 특정 사용 사례 return input코드 에는 전혀 필요하지 않습니다 .


0

게시물의 전체 코드를 정확히 다음과 같이 바꾸십시오.

to clickClassName(theClassName, elementnum)
    tell application "Google Chrome" to (tabs of window 1 whose URL contains "youtube")
    set youtubeTabs to item 1 of the result
    tell application "Google Chrome"
        execute youtubeTabs javascript "document.getElementsByClassName('" & theClassName & "')[" & elementnum & "].click();"
    end tell
end clickClassName    

clickClassName("ytp-play-button ytp-button", 0)

여기에 이미지 설명을 입력하십시오


이것을 시도했다. 여전히 같은 동작입니다. Preferences그렇지 않으면 창이 열려 있을 때 작동 합니다.
th3an0maly

1
접근성 설정에도 Chrome을 추가해보세요
wch1zpink

처리기 에서 코드를 래핑하고 execute 명령 을 실행하기 위해 처리기를 호출하면 다른 결과가 생성되고 execute 처리기를 사용하지 않고 올바르게 구성된 명령 _을 직접 호출 할 때 수행하는 이유가 궁금합니다. _handler를 사용하면 두 코딩 변형이 정확히 동일한 작업을 수행 execute tab id # of window id # javascript "document.getElementsByClassName('ytp-play-button ytp-button')[0].click();"
하므로이

OP에 작성된 코드가 Automator (또는 스크립트 편집기)에서 실행될 때 이미 작동했다는 사실은 코드 자체에 아무런 문제가 없으며 처리 된 문제를 해결하기 위해 코드를 명시 적으로 사용할 필요가 없음을 보여줍니다 . 참고로, 사용자가 추가 한 바로 가기 키 시퀀스는 버그가 있거나 가끔씩 작동하거나 일부 사용자에게는 전혀 작동하지 않는 것으로 알려진 문제입니다. 코드가 실행되는 방식을 변경해도이 사용 사례에서는 문제가 해결되지 않습니다. 서비스 설정이 올바른지 확인하고 바로 가기 키 시퀀스를 다른 키 사용하지 않는 것이 첫 번째 단계입니다.
user3439894

원래 스 니펫이 많은 스크립트가 있고 일반적으로 많은 스크립트 작업에서 처리기를 호출하기 때문에 처리기에 코드가 래핑되어 있습니다. 방금 핸들러로 코드를 복사했습니다. 다른 사람들이 스크립트에서 여러 번 사용하려고하는 경우를 대비하여.
wch1zpink
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.