2010-06-03 2 views
10

내 objective-c 프로그램에서 시스템의 기본 브라우저가 무엇이든 관계없이 Safari에서 URL을 열어야합니다. 어떤 시스템 브라우저가 설정되어 있더라도 Safari에서 URL 열기

[ws launchAppWithBundleIdentifier: @"com.apple.Safari" 
          options: NSWorkspaceLaunchWithoutActivation 
    additionalEventParamDescriptor: NULL 
       launchIdentifier: nil]; 

만 전달하는 방법을 알아 내야 : 나는 이것에 가까운 것 같아요

NSWorkspace * ws = [NSWorkspace sharedWorkspace]; 
[ws openURL: url]; 

: 즉, 파이어 폭스 또는 무엇이든에게 다른 브라우저를 실행할 수 있기 때문에이 작동하지 않습니다 것을 의미합니다 매개 변수로 URL에 ... 쉬운 방법이 있습니까?

감사합니다.

업데이트 : 다음 코드는 원하는 URL로 Safari를 실행하지만 Safari가 즉시 종료됩니다! 이게 왜 어떤 아이디어일까요?

NSWorkspace * ws = [NSWorkspace sharedWorkspace]; 
[ws openURLs: urls withAppBundleIdentifier:@"com.apple.Safari" 
    options: NSWorkspaceLaunchDefault 
additionalEventParamDescriptor: NULL 
launchIdentifiers: NULL]; 

LSOpenFromURLSpec과 동일한 거동을 관찰했다. Safari 인스턴스가 실행중인 경우 제대로 작동합니다. Safari 인스턴스가 실행 중이 아니면 새로운 인스턴스가 시작되고 즉시 종료됩니다.

업데이트 2 : Safari는 플래시가 내장 된 웹 사이트에서만 충돌합니다. 위의 코드를 사용하면 google.com을 열어도 좋지만 Safari는 YouTube 동영상과 충돌합니다.

+0

'시스템 ("Safari URL") 또는 이와 비슷한 것이 작동하지 않습니까? – barrycarter

+0

불행히도 없습니다. 나는 터미널에서 이것을 시도했다. Safari가 시작되지만 URL을 로컬 파일로 취급하므로 찾을 수 없습니다. – Mark

+0

이것은 나에게 가까이 왔지만 Safari가 아직 실행 중이 아니면 즉시 열리고 종료됩니다. 오류가보고되지 않았습니다 : NSString * safariFullPath = [[NSWorkspace sharedWorkspace] fullPathForApplication : @ "Safari"]; NSArray * urls = [NSArray arrayWithObject : url]; LSLaunchURLSpec urlSpec; urlSpec.appURL = (CFURLRef) [NSURL URLWithString : safariFullPath]; urlSpec.itemURLs = (CFArrayRef) urls; urlSpec.passThruParams = NULL; urlSpec.launchFlags = kLSLaunchAsync; urlSpec.asyncRefCon = NULL; OSStatus 상태 = LSOpenFromURLSpec (& urlSpec, NULL); – Mark

답변

5

NSWorkspace에서 OpenURLs 방법을 시도 : 나는 위에 열거

- (BOOL) openURLs:(NSArray *)urls 
     withAppBundleIdentifier:(NSString *)bundleIdentifier 
     options:(NSWorkspaceLaunchOptions)options 
     additionalEventParamDescriptor:(NSAppleEventDescriptor *)descriptor 
     launchIdentifiers:(NSArray **)identifiers 
2

두 가지 옵션이 실제로 플래시 동영상을 포함하지 않는 웹 사이트에 대한 작동합니다.

내가 설명한 크래시는 단일 AppleScript로 재현 할 수있는 버그 인 것 같습니다. 나는 기록을 위해이 (AppleScript to open URL in Safari crashes for Flash-based websites)

에 대해 별도의 질문을 열어, 내 질문에 대한 대답은 LSOpenFromURLSpec를 사용하거나, 또는이 코드 :

NSWorkspace * ws = [NSWorkspace sharedWorkspace]; 
[ws openURLs: urls withAppBundleIdentifier:@"com.apple.Safari" 
    options: NSWorkspaceLaunchDefault 
    additionalEventParamDescriptor: NULL 
    launchIdentifiers: NULL]; 
+0

Hy Mark가 문제를 지금 해결 한 경우. 당신은 귀하의 질문에 대한 답변으로 귀하의 (또는 다른 하나)를 표시 할 수 있습니다. 당신이 충돌을 경험한다면 나는 이것이 또 다른 문제가 될 것이라고 생각한다. – Besi

4

사용이 기본 브라우저에서 URL을 엽니 다. ..

NSURL *url = [NSURL URLWithString:@"http://www.stackoverflow.com/"]; 
if(![[NSWorkspace sharedWorkspace] openURL:url]) 
    NSLog(@"Failed to open url: %@",[url description]); 
+2

URL을 열어도 실제로 질문에 답하지는 않는다고 생각합니다. – Besi

2

AppKit 프레임 워크가 필요하지 않습니다. 이것을 구현하십시오.

NSURL *url = [NSURL URLWithString:@"http://www.apple.com"];  

[[UIApplication sharedApplication] openURL:url]; 
관련 문제