在我的objective-c程序中,无论系统的默认浏览器是什么,我都需要在Safari中打开一个URL。这意味着这不起作用,因为它可以启动Firefox或其他任何浏览器:
NSWorkspace * ws = [NSWorkspace sharedWorkspace];
[ws openURL: url];
我想我很接近这个:
[ws launchAppWithBundleIdentifier: @"com.apple.Safari"
options: NSWorkspaceLaunchWithoutActivation
additionalEventParamDescriptor: NULL
launchIdentifier: nil];
只需要弄清楚如何传递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仅在嵌入了Flash的网站崩溃。根据上面的代码,我可以打开google.com,但是Safari会崩溃,例如,YouTube视频。
答案 0 :(得分:5)
尝试NSWorkspace
中的OpenURLs
方法:
- (BOOL) openURLs:(NSArray *)urls
withAppBundleIdentifier:(NSString *)bundleIdentifier
options:(NSWorkspaceLaunchOptions)options
additionalEventParamDescriptor:(NSAppleEventDescriptor *)descriptor
launchIdentifiers:(NSArray **)identifiers
答案 1 :(得分:4)
使用此功能在默认浏览器中打开网址...
NSURL *url = [NSURL URLWithString:@"http://www.stackoverflow.com/"];
if( ![[NSWorkspace sharedWorkspace] openURL:url] )
NSLog(@"Failed to open url: %@",[url description]);
答案 2 :(得分:2)
我上面列出的两个选项实际上适用于不包含Flash电影的网站。
我描述的崩溃似乎是一个甚至可以用一个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];
答案 3 :(得分:2)
您不需要AppKit框架。只需实现这一点。
NSURL *url = [NSURL URLWithString:@"http://www.apple.com"];
[[UIApplication sharedApplication] openURL:url];