2009-11-22 7 views
17

Questo è nuovo per me come sviluppatore desktop.Come fa il sito web Apple iTunes a lanciare l'applicazione iTunes sul mio computer quando faccio clic sul pulsante blu "Avvia iTunes"?

Se riesco a capire come questo è realizzato, potrebbe essere rilevante per alcune ricerche che sto facendo, in particolare come migrare le app desktop pesanti in un'implementazione web.

La grafica più orientata ai moduli e leggera che riesco a capire, ma la grafica 3D pesante richiede ancora qualche forma di applicazione non browser.

Per quanto posso determinare, iTunes installa qualche forma di nuovo gestore di protocollo sulla mia macchina, corrispondente a "itms", al posto di "http".

Questo per me è fantastico e misterioso, quasi magico. Qualsiasi aiuto o suggerimento per ulteriori materiali di lettura e/o risorse sarebbe molto gradito.

+0

Quale piattaforma? – arul

+0

Windows per ora, ma ho idee ... – kmontgom

risposta

14

È possibile registrare "gestori di protocollo" con alcuni browser. Penso che ci sia un posto nel sistema operativo in cui puoi regsiderare il tuo.

Vedi

crearne di nuovi in ​​Firefox: http://ajaxian.com/archives/creating-custom-protocol-handlers-with-html-5-and-firefox

in Safari: http://discussions.apple.com/thread.jspa?threadID=1280989

speciali "gestori di protocollo di telefonia mobile" sono ampiamente utilizzati in iPhone/iPod per lanciare il combinatore telefonico, e-mail l'invio, Google Maps e così via ... http://www.iphonedevfaq.com/index.php?title=Protocols

Ecco un esempio di come riconfigurare il gestore di protocollo mailto: per attivare Gmail piuttosto che un esterno client di posta: http://lifehacker.com/392287/set-firefox-3-to-launch-gmail-for-mailto-links

+1

Grazie! Sto ricercando i collegamenti in questo momento. – kmontgom

+0

Se si desidera aggiungere il proprio gestore di protocollo, è necessario configurare il browser Web e possibilmente il sistema operativo/la shell dell'interfaccia utente (suppongo che sia come si farebbe con IE e Safari). Per motivi di sicurezza sarebbe pericoloso per consentire a qualsiasi vecchio javascript scaricato dal Web di riconfigurare il browser per attivare le app sul desktop. – daf

+0

in chrome: http://updates.html5rocks.com/2011/06/Registering-a-custom-protocol-handler –

7

Semplice.

<a href="itunes:///">Open iTunes</a> 

maggior parte delle applicazioni ora a un giorno hanno "Schemi URL personalizzati" per esempio - Coda (http://panic.com/coda) è possibile aggiungere frammenti di codice tramite:

<a href="codaclips:///<<**Title:NAME**>>blabla">Add Clip</a> 
+0

Grazie per le informazioni. Ora devo approfondire i gestori di protocollo e come crearli. Eventuali suggerimenti? – kmontgom

+0

per la tua app? – tarnfeld

+0

Sì. Come ho già detto, molte delle funzionalità possono essere gestite direttamente nel browser tramite HTML/AJAX o Flex o Silverlight. È la grafica pesante che probabilmente non può essere. In questo caso, voglio lanciare un'applicazione separata e preinstallata che gestisca specificamente le cose 3D. Per heavy-duty intendo decine di milioni di vertici e milioni di quad/triangoli. – kmontgom

1

In Windows questo è chiamato un gestore di protocollo innestabile. This article on CodeProject mostra come implementare un gestore di protocollo collegabile su Windows.

Nota: questo è più complicato della semplice registrazione di un nuovo protocollo nel registro, come ad esempio myprotocol: // e dell'avvio di uno specifico exe ogni volta che viene fatto clic su un nuovo myprotocol: // anchor.

In realtà consente all'applicazione di ricevere ed elaborare la richiesta e di creare dinamicamente i dati di risposta. Se il tuo protocollo verrà anche chiamato a livello di programmazione, di solito è importante.

Questo può essere eccessivo per la vostra situazione, tuttavia è utile sapere.

0

Solo un follow-up per coloro che hanno risposto.

Si scopre che la situazione è alquanto complicata. Anche se about: config è disponibile per FireFox, facendo in modo che le voci appropriate non funzionino.

Questo collegamento: http://support.mozilla.com/tiki-view_forum_thread.php?locale=fr&forumId=1&comments_parentId=74068 descrive problemi per Linux, ma è possibile verificare che gli stessi problemi si verifichino anche in Windows.

Per fare questo lavoro in ambiente Windows, ho dovuto creare un file .REG che contiene le informazioni del caso, in base a questo link: http://kb.mozillazine.org/Register_protocol#Windows

Ora funziona!

Grazie per tutte le risposte.

1

Il modo più semplice è registrare un tipo di file nell'applicazione (chiamata anche File Association), ad esempio ".myp" e quando l'utente preme "start myapp" sul sito scarica un file "startapp.myp".

Windows esaminerà quindi l'estensione del file e scoprirà che è registrato nell'app e avvierà l'applicazione con il file come parametro di comando. La tua app può quindi leggere il file e fare cose a seconda del contenuto.

Ecco il codice per registrare un tipo di file per l'applicazione fatto in VB.Net:
(esempio è tratto da http://www.developerfusion.com/article/36/file-assocation/2/ ma copiato qui per ragione persistente, consultare il sito originale per i commenti)

'// Registry windows api calls 
Private Declare Function RegCreateKey& Lib "advapi32.DLL" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpszSubKey As String, ByVal lphKey As Long) 
Private Declare Function RegSetValue& Lib "advapi32.DLL" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpszSubKey As String, ByVal fdwType As Long, ByVal lpszValue As String, ByVal dwLength As Long) 
'// Required constants 
Private Const HKEY_CLASSES_ROOT = &H80000000 
Private Const MAX_PATH = 256& 
Private Const REG_SZ = 1 

'// procedure you call to associate the tmg extension with your program. 
Private Sub MakeDefault() 
    Dim sKeyName As String '// Holds Key Name in registry. 
    Dim sKeyValue As String '// Holds Key Value in registry. 
    Dim ret As Long '// Holds error status if any from API calls. 
    Dim lphKey As Long '// Holds created key handle from RegCreateKey. 

    '// This creates a Root entry called "TextMagic" 
    sKeyName = "TextMagic" '// Application Name 
    sKeyValue = "TextMagic Document" '// File Description 
    ret = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey) 
    ret = RegSetValue&(lphKey&, Empty, REG_SZ, sKeyValue, 0&) 

    '// This creates a Root entry called .tmg associated with "TextMagic". 
    sKeyName = ".tmg" '// File Extension 
    sKeyValue = "TextMagic" '// Application Name 
    ret = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey) 

    ret = RegSetValue&(lphKey, Empty, REG_SZ, sKeyValue, 0&) 

    '//This sets the command line for "TextMagic". 
    sKeyName = "TextMagic" '// Application Name 
    If Right$(App.Path, 1) = "\" Then 
     sKeyValue = App.Path & App.EXEName & ".exe %1" '// Application Path 
    Else 
     sKeyValue = App.Path & "\" & App.EXEName & ".exe %1" '// Application Path 
    End If 
    ret = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey) 
    ret = RegSetValue&(lphKey, "shell\open\command", REG_SZ, sKeyValue, MAX_PATH) 
End Sub 

Private Sub Form_Load() 
    '// ensure we only register once. When debugging etc, remove the SaveSetting line, so your program will 
    '// always attempt to register the file extension 
    If GetSetting(App.Title, "Settings", "RegisteredFile", 0) = 0 Then 
     '// associate tmg extension with this app 
     MakeDefault() 
     SaveSetting(App.Title, "Settings", "RegisteredFile", 1) 
    End If 
    '// check command line argument: 
    If Command$ <> Empty Then 
     '// we have a file to open 
     '// Fetch the file name from Command$ and then read the file if needed. 
    End If 

End Sub