33

Cocoa アプリケーションをデフォルトの Web ブラウザーとして設定するにはどうすればよいですか?

ユーザーが他のアプリケーション (メール、iChat など) で HTTP または HTTPS リンクをクリックしたときにデフォルトで起動されるアプリケーションを作成したいと考えています。

4

4 に答える 4

80

既定の Web ブラウザーとして機能するアプリを作成するには、4 つの手順があります。最初の 3 つのステップでは、アプリが関連する URL スキーム (HTTP および HTTPS) のロール ハンドラーとして機能できるようになり、最後のステップでそれらのスキームのデフォルトのロール ハンドラーになります。

1) アプリが処理できる URL スキームをアプリケーションの info.plist ファイルに追加します

のサポートを追加するには、アプリケーションの info.plist ファイルに次を追加する必要がhttp://ありhttps://ます。これにより、アプリケーションが HTTP および HTTP URL を処理できることが OS に通知されます。

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>http URL</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>http</string>
        </array>
    </dict>
    <dict>
        <key>CFBundleURLName</key>
        <string>Secure http URL</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>https</string>
        </array>
    </dict>
</array>

2) URL ハンドラー メソッドを作成する

このメソッドは、アプリケーションを使用して URL を開く必要がある場合に、OS によって呼び出されます。このメソッドをどのオブジェクトに追加するかは問題ではなく、次のステップでイベント マネージャーに明示的に渡されます。URL ハンドラー メソッドは次のようになります。

- (void)getUrl:(NSAppleEventDescriptor *)event 
    withReplyEvent:(NSAppleEventDescriptor *)replyEvent
{
  // Get the URL
  NSString *urlStr = [[event paramDescriptorForKeyword:keyDirectObject] 
    stringValue];

  //TODO: Your custom URL handling code here
}

3) URL ハンドラ メソッドを登録する

次に、アプリを使用して URL を読み込む場合に呼び出すオブジェクトとメソッドをイベント マネージャーに伝えます。ここのコードでは、メソッドを定義する同じオブジェクトからself呼び出していると仮定して、イベント ハンドラーとして渡されます。setEventHandlergetUrl:withReplyEvent:

このコードは、アプリケーションの初期化コードのどこかに追加する必要があります。

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

Adobe AIR の初期バージョンを含む一部のアプリケーションは、別の WWW!/OURL AppleEvent を使用して、アプリケーションが URL を開くように要求するため、これらのアプリケーションと互換性を持たせるには、次のものも追加する必要があります。

[em
  setEventHandler:self 
  andSelector:@selector(getUrl:withReplyEvent:) 
  forEventClass:'WWW!' 
  andEventID:'OURL'];

4) アプリを既定のブラウザーとして設定する

アプリケーションがブラウザであることを OS に通知するまで、これまで行ってきたことはすべて、それをデフォルトのブラウザにする必要があります。

これを行うには、Launch Services API を使用する必要があります。この場合、アプリを HTTP および HTTPS リンクのデフォルトのロール ハンドラーに設定します。

CFStringRef bundleID = (CFStringRef)[[NSBundle mainBundle] bundleIdentifier];
OSStatus httpResult = LSSetDefaultHandlerForURLScheme(CFSTR("http"), bundleID);
OSStatus httpsResult = LSSetDefaultHandlerForURLScheme(CFSTR("https"), bundleID);
//TODO: Check httpResult and httpsResult for errors

(既定のブラウザを変更する前に、ユーザーの許可を求めるのがおそらく最善です。)

カスタム URL スキーム

これらと同じ手順を使用して、独自のカスタム URL スキームを処理することもできます。カスタム URL スキームを作成する場合は、他のアプリとの競合を避けるために、アプリのバンドル ID に基づいてスキームを作成することをお勧めします。したがって、バンドル ID が である場合は、 URL のcom.example.MyApp使用を検討する必要があります。x-com-example-myapp://

于 2008-09-08T11:33:41.763 に答える
2

http(s) のデフォルトのヘルパー アプリを変更したいだけの場合は、Safari の設定で変更できます。そこにドロップダウンがあり、http 用に登録されているすべてのハンドラー アプリケーションを選択できます。アプリ自体を既定のブラウザーとして自動的に設定するには、前の手順を参照してください。

于 2008-09-21T18:10:05.450 に答える
0

System Preferences > General > Default web browser(少なくとも macOS 11 の場合)オプションとして表示するには、次のように、 HTMLおよびXHTMLのドキュメント タイプをInfo.plistに追加する必要があります(受け入れられた回答ですでに説明されている 4 つの手順の後)。

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>HTML document</string>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.html</string>
        </array>
    </dict>
    <dict>
        <key>CFBundleTypeName</key>
        <string>XHTML document</string>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.xhtml</string>
        </array>
    </dict>
</array>
于 2020-12-28T14:39:59.917 に答える