Jak ustawić aplikację Cocoa jako domyślną przeglądarkę internetową?

Jak ustawić aplikację Cocoa jako domyślną przeglądarkę internetową?

Chcę utworzyć aplikację, która jest domyślnie uruchamiana, gdy użytkownik kliknie link HTTP lub HTTPS w innych aplikacjach(Mail, iChat itp.).

Author: Bill the Lizard, 2008-09-08

2 answers

Istnieją cztery kroki, aby stworzyć aplikację, która może działać jako domyślna przeglądarka internetowa. Pierwsze trzy kroki pozwalają aplikacji działać jako Obsługa ról dla odpowiednich schematów URL (HTTP i HTTPS), a ostatni krok sprawia, że jest to domyślna obsługa ról dla tych schematów.

1) Dodaj do informacji aplikacji Schematy adresów URL, które aplikacja może obsługiwać.plik plist

Aby dodać wsparcie dla http:// i https://, musisz dodać następujące informacje do informacji o aplikacji.plik plist. To informuje system operacyjny, że aplikacja może obsługiwać adresy URL HTTP i HTTP.

<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) Napisz metodę obsługi adresu URL

Ta metoda zostanie wywołana przez system operacyjny, gdy chce użyć Twojej aplikacji do otwarcia adresu URL. Nie ma znaczenia, do którego obiektu dodasz tę metodę, który zostanie jawnie przekazany do menedżera zdarzeń w następnym kroku. Metoda obsługi adresów URL powinna wyglądać mniej więcej tak:

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

  //TODO: Your custom URL handling code here
}

3) Zarejestruj obsługę adresu URL metoda

Następnie powiedz menedżerowi zdarzeń, który obiekt i metodę wywołać, gdy chce użyć Twojej aplikacji do załadowania adresu URL. W kodzie przekazuję self jako obsługę zdarzenia, zakładając, że wywołujemy setEventHandler z tego samego obiektu, który definiuje metodę getUrl:withReplyEvent:.

Powinieneś dodać ten kod gdzieś w kodzie inicjalizacji aplikacji.

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

Niektóre aplikacje, w tym wczesne wersje Adobe AIR, używają alternatywnego WWW!/ OURL AppleEvent to request aplikacja otwiera adresy URL, więc aby być kompatybilnym z tymi aplikacjami, należy również dodać:

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

4) Ustaw swoją aplikację jako domyślną przeglądarkę

Wszystko, co zrobiliśmy do tej pory powiedział OS, że aplikacja jest przeglądarka , teraz musimy go domyślna przeglądarka.

Musimy użyć API usług uruchamiania w tym celu. W tym przypadku ustawiamy naszą aplikację jako domyślną funkcję obsługi ról dla HTTP i HTTPS linki:

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

(prawdopodobnie najlepiej zapytać użytkownika o zgodę przed zmianą domyślnej przeglądarki.)

Własne schematy URL

Warto zauważyć, że możesz również użyć tych samych kroków do obsługi własnych niestandardowych schematów URL. Jeśli tworzysz Niestandardowy schemat URL, dobrze jest oprzeć go na identyfikatorze pakietu aplikacji, aby uniknąć kolizji z innymi aplikacjami. Jeśli więc Twój identyfikator pakietu to com.example.MyApp, powinieneś rozważyć użycie adresów URL x-com-example-myapp://.

 72
Author: georgebrock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-23 07:59:25

Jeśli chcesz tylko zmienić domyślną aplikację helper dla http( s), możesz to zrobić w preferencjach Safari. Znajdziesz tam listę rozwijaną, która pozwoli Ci wybrać wszystkie zarejestrowane aplikacje obsługi http. Aby automatycznie ustawić aplikację jako domyślną przeglądarkę, zapoznaj się z poprzednimi instrukcjami.

 1
Author: Raphael Schweikert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-21 18:10:05