How does the Apple iTunes web site launch the iTunes application on my computer when I click the blue “Launch iTunes” button?

后端 未结 5 428
广开言路
广开言路 2020-12-25 07:46

This is new to me as a desktop developer.

If I could figure out how this is accomplished, it may be relevant to some research I\'m doing, specifically how to migrate

相关标签:
5条回答
  • 2020-12-25 08:27

    In Windows this is called a Pluggable Protocol Handler. This article on CodeProject shows how to implement a pluggable protocol handler on Windows.

    Note, this is more involved then just registering a new protocol in the registry, such as myprotocol:// and having it start a specific exe whenever a myprotocol:// anchor is clicked.

    It actually allows your application to receive and process the request and to create response data dynamically. If your protocol will also be called programmatically this is usually important.

    This may be overkill for your situation however it is handy to know about.

    0 讨论(0)
  • 2020-12-25 08:28

    Just a follow-up for those who answered.

    Turns out that the situation is somewhat complicated. Although about:config is available for FireFox, making the appropriate entries just doesn't work.

    This link: http://support.mozilla.com/tiki-view_forum_thread.php?locale=fr&forumId=1&comments_parentId=74068 describes problems for Linux, but I can verify that the same problems also occur under Windows.

    To make this work under Windows, I had to create a .REG file which contains the appropriate information, according to this link: http://kb.mozillazine.org/Register_protocol#Windows

    Now it works!

    Thanks for all the responses.

    0 讨论(0)
  • 2020-12-25 08:37

    You can register "protocol handlers" with some browsers. I think there's a place in the operating system where you can regsiter your own.

    See

    • http://msdn.microsoft.com/en-us/library/dd588696(office.11).aspx
    • http://blog.ryaneby.com/archives/firefox-protocol-handlers/

    Creating new ones 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

    Special "mobile protocol handlers" are used extensively in the iPhone/iPod to launch the phone dialler, email sending, google maps and so on... http://www.iphonedevfaq.com/index.php?title=Protocols

    Here's an example of how to reconfigure the mailto: protocol handler to trigger gmail rather than an external mail client: http://lifehacker.com/392287/set-firefox-3-to-launch-gmail-for-mailto-links

    0 讨论(0)
  • 2020-12-25 08:42

    Simple.

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

    Most apps now-a-days have "Custom URL Schemes" For Example - Coda (http://panic.com/coda) you can add snippets of code via:

    <a href="codaclips:///<<**Title:NAME**>>blabla">Add Clip</a>
    
    0 讨论(0)
  • 2020-12-25 08:46

    The easiest way is to register a filetype to your application (also called File Association), for example ".myp" and when the user press "start myapp" on the site it downloads a file "startapp.myp".

    Windows will then look at the extention of the file and find that it is registered to your app and start your application with the file as a command-parameter. Your app can then read the file and do stuff depending of it contents.

    Here are code to register a filetype to your application done in VB.Net:
    (Example is taken from http://www.developerfusion.com/article/36/file-assocation/2/ but copied here for persistent reason, check original site for comments)

    '// 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
    
    0 讨论(0)
提交回复
热议问题