Automator에서 작성된 URL 핸들러 애플리케이션에서 클릭 한 URL에 액세스하는 방법 대화에서 링크를 클릭하면 Firefox

현재 OS X에서 기본 URL 처리 동작을 수정하려고합니다. 웹 브라우저 외부의 링크를 클릭 할 때이 URL을 기본 웹 브라우저에서 열지 않고 대지에 복사하려고합니다 (예 : , Skype 대화에서 링크를 클릭하면 Firefox (현재 기본 웹 브라우저)에서 URL을 여는 대신이 URL을 OS X 페이스트 보드에 복사해야합니다.

솔루션에 대해 생각했지만 현재 구현할 수 없습니다. URL을 보드에 전송하는 응용 프로그램을 만들고이 응용 프로그램을 기본 웹 브라우저로 설정할 수 있다면 목표를 달성 할 수 있습니다.

Shell 명령을 실행 pbcopy하고이 응용 프로그램을 기본 웹 브라우저로 설정 한 Automator로 응용 프로그램을 만들었지 만 예상 결과를 얻지 못했습니다. 몇 가지 테스트를했는데 링크를 클릭하면 응용 프로그램이 실행되고 있음을 확인할 수 있지만 URL을 응용 프로그램 / 쉘 스크립트로 전달할 수는 없습니다. 나는 stdin이나 전달 된 논쟁을 모두 시도했지만 성공하지 못했습니다.

Automator로 만든 응용 프로그램이 클릭 한 URL을 검색하여 pbcopy해당 응용 프로그램이 URL에 대한 (기본) 처리기로 설정되어있는 경우 보낼 수 있는 방법이 있습니까?

또는 입력을 가져 와서 Automator보다 판지에 넣는 가짜 웹 브라우저를 만드는 더 좋은 방법이 있습니까? 또는 사용자 정의 응용 프로그램 / 스크립트없이 목표를 달성 할 수있는 다른 방법이 있습니까?



답변

Mac OS X에서 URL을 여는 방식은 실제로 생각보다 복잡합니다. URL을 클릭하면 Mac OS X은 브라우저에 URL을 열지 않아도됩니다. 대신 kAEGetURLURL이 포함 된 ID와 함께 Apple 이벤트를 보냅니다 .

나는 실제로 Automator를 사용하지 않았습니다 (일반적인 사용에는 너무 느리고 제한적 임). 이에 대해서는 확실하지 않지만 Apple Events를 처리 할 수있는 능력이 있는지 의심합니다. 따라서 원하는 것을 달성하기 위해 Automator를 사용할 수 없습니다.

그러므로 Xcode에서 일반적인 Objective-C 앱을 사용해야합니다.

당신이해야 할 두 가지 기본 사항은 다음과 같습니다

  1. kAEGetURL 이벤트를 수신하여 응용 프로그램을 등록하고 설정 CFBundleURLTypes을 포함하는 앱의 Info.plist에 httphttps.

  2. kAEGetURL 이벤트를 처리하는 메소드를 구현하고 URL을 클립 보드에 복사하십시오.

이 두 가지 일은 Objective-C에서 비교적 간단합니다. 설명하기 위해이 작업을 수행하는 샘플 응용 프로그램을 만들었습니다. https://github.com/houbysoft/short/tree/master/Copy%20URL%20to%20Clipboard 에서 볼 수 있습니다 . 가장 중요한 파일은 https://github.com/houbysoft/short/blob/master/Copy%20URL%20to%20Clipboard/Copy%20URL%20to%20Clipboard/AppDelegate.m 이며 여기에서 등록 방법을 확인할 수 있습니다 이벤트 (applicationWillFinishLaunching : 메소드에서 수행) 및 클립 보드에 복사하는 방법 (getUrl : withReplyEvent : 메소드에서 수행)

게으른 느낌이 들며 이것이 작동하는지 확인하려면 이 파일을 가져 와서 응용 프로그램을 추출하여 기본 웹 브라우저로 설정하십시오 (Safari 환경 설정을 열고 기본 웹 브라우저 필드에서 해당 응용 프로그램을 찾으십시오). 그런 다음 Skype에서 링크를 클릭하면 클립 보드로 바로 복사됩니다.