2013-04-14 2 views
0

내 아빠가 전자 메일 하이퍼 링크를 클릭하면 OSX는 한번도 사용 해본 적이 없으며 배울 것도 원치 않는 Mail을 열려고합니다. ISP가 제공하는 이메일 서비스 (bleh)에 대한 브라우저 창을 열어보고 싶습니다.(OSX) 브라우저에서 전자 메일 링크를 클릭하면 OS가 전자 메일 주소를 기본 메일 응용 프로그램으로 어떻게 전달합니까?

기본적으로 해당 상호 작용을 처리하는 프로그램을 작성하려고하지만 하이퍼 링크의 전자 메일 주소가 응용 프로그램에 전달되는 방식을 이해할 수 없습니다. 기본적으로 ... [email protected]에 대한 mailto 하이퍼 링크를 클릭하면 OS가 Mail.app (또는 기본 클라이언트가 무엇이든)에게 [email protected]에 대한 새 전자 메일을 작성하는 방법을 알려줍니다.

답변

1

는 먼저, Mail.app 수동적는 자사의 Info.plist 파일에 다음을 포함하여 "흔한"URL 체계를 처리 서비스 시작 알려줍니다

<key>CFBundleURLTypes</key> 
<array> 
    <dict> 
     <key>CFBundleURLName</key> 
     <string>Email Address URL</string> 
     <key>CFBundleURLSchemes</key> 
     <array> 
      <string>mailto</string> 
     </array> 
     <key>LSIsAppleDefaultForScheme</key> 
     <true/> 
    </dict> 
    ... 
</array> 

다음, 그것은 에 대한 핸들러를 설정/kAEGetURL Apple 이벤트.

NSAppleEventManager* appleEventManager = [NSAppleEventManager sharedAppleEventManager]; 
[appleEventManager setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL]; 

당신은이 같은 핸들러 메소드 구현할 수 : 코코아, 그 뭔가처럼 보이는 "흔한"URL에 대한

- (BOOL)handleGetURLEvent:(NSAppleEventDescriptor*)event withReplyEvent:(NSAppleEventDescriptor*)replyEvent 
{ 
    NSAppleEventDescriptor* directObjectDescriptor = [event paramDescriptorForKeyword:keyDirectObject]; 
    NSString*    urlString    = [directObjectDescriptor stringValue]; 
    NSURL*     url      = [NSURL URLWithString:urlString]; 
    // ... do something with url ... 
} 

NSURL의 구문 분석 동작의 많은 부분이 있기 때문에 효과가 없습니다 URL이 RFC 1808을 준수하지 않습니다 (리소스 지정자가 "//"로 시작하지 않음). -resourceSpecifier 메서드를 사용하여 실제로는 scheme (mailto)과 리소스 지정자 만 가져올 수 있습니다. 일부 mailto URL은 "? subject = Some % 20subject % 20text"와 같은 검색어와 유사한 구문을 가질 수 있지만 NSURL은 그 선택을 돕지 않습니다. 따라서 수동으로해야합니다. (자원 지정자 앞부분에 "//"을 삽입하여 가짜 URL을 구성하는 것을 고려해 볼 수 있으며 NSURL은이를 구문 분석합니다.)

+0

대단히 고마워요! –

관련 문제