12

私の 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 が埋め込まれた Web サイトでのみクラッシュします。上記のコードを使用すると、google.com を問題なく開くことができますが、たとえば、YouTube ビデオで Safari がクラッシュします。

4

4 に答える 4

5

OpenURLsからの方法を試してくださいNSWorkspace:

- (BOOL) openURLs:(NSArray *)urls
         withAppBundleIdentifier:(NSString *)bundleIdentifier
         options:(NSWorkspaceLaunchOptions)options
         additionalEventParamDescriptor:(NSAppleEventDescriptor *)descriptor
         launchIdentifiers:(NSArray **)identifiers
于 2010-06-03T14:47:04.013 に答える
3

Use this to open the url in the default browser...

NSURL *url = [NSURL URLWithString:@"http://www.stackoverflow.com/"];
if( ![[NSWorkspace sharedWorkspace] openURL:url] )
    NSLog(@"Failed to open url: %@",[url description]);
于 2011-08-20T03:55:38.927 に答える
2

AppKit フレームワークは必要ありません。これを実装するだけです。

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

[[UIApplication sharedApplication] openURL:url];
于 2015-07-11T00:36:12.893 に答える
2

上記の 2 つのオプションは、Flash ムービーを含まない Web サイトで実際に機能します。

私が説明したクラッシュは、単一の Applescript でも再現できるバグのようです。これについて別の質問を開きました(AppleScript to open URL in Safari crashes for Flash-based website

記録のために、私の質問への答えは、LSOpenFromURLSpecまたはこのコードを使用することです:

NSWorkspace * ws = [NSWorkspace sharedWorkspace];
[ws openURLs: urls withAppBundleIdentifier:@"com.apple.Safari" 
  options: NSWorkspaceLaunchDefault
  additionalEventParamDescriptor: NULL
  launchIdentifiers: NULL];
于 2010-06-04T06:36:24.030 に答える