成长值: 12773
个人资料
职务: 董事会
铜板: 1477 个
金币: 1001 个
|
腾讯官方通过 Tencent://Message/协议可以让QQ用户显示QQ/TM的在线状态发布在互联网上;并且点击 ,不用加好友也可以聊天: 具体代码: - <a href="tencent://message/?uin=215555521&Site=JooIT.com&Menu=yes">
- <img border="0" SRC='http://wpa.qq.com/pa?p=1:215555521:3' alt="点击这里给我发消息">
- </a>
复制代码但它是如何实现的呢?下面文章以及微软官方说明详细解释了其工作原理: Register protocol,此文中对于 Windows、Linux 和 OS X 操作系统如何注册协议都有说明。比如说 Windows,其实只需写入注册表,即可实现协议与执行程序的关联。例如腾讯的Tencent://Message协议注册表如下: - [HKEY_CLASSES_ROOT"TENCENT]
- @="TencentProtocol"
- “URL Protocol"="D:""Program Files""Tencent""QQ""Timwp.exe"
- [HKEY_CLASSES_ROOT"TENCENT"DefaultIcon]
- @="D:""Program Files""Tencent""QQ""Timwp.exe,1"
- [HKEY_CLASSES_ROOT"TENCENT"shell]
- [HKEY_CLASSES_ROOT"TENCENT"shell"open]
- [HKEY_CLASSES_ROOT"TENCENT"shell"open"command]
- @="""D:""Program Files""Tencent""QQ""Timwp.exe"" ""%1"""
复制代码此注册表所实现的就是当浏览器(或其它)碰到 tencent://… 时,自动调用 Timwp.exe,并把 tencent://… 地址作为第一个参数传递给 Timwp.exe。 程序代码: - [HKEY_CLASSES_ROOT"TENCENT]
- @="TencentProtocol"
- “URL Protocol"="D:""Program Files""Tencent""QQ""Timwp.exe"
- [HKEY_CLASSES_ROOT"TENCENT"DefaultIcon]
- @="D:""Program Files""Tencent""QQ""Timwp.exe,1"
- [HKEY_CLASSES_ROOT"TENCENT"shell]
- [HKEY_CLASSES_ROOT"TENCENT"shell"open]
- [HKEY_CLASSES_ROOT"TENCENT"shell"open"command]
- @="""D:""Program Files""Tencent""QQ""Timwp.exe"" ""%1"""
-
复制代码- 此注册表所实现的就是当浏览器(或其它)碰到 tencent://… 时,自动调用 Timwp.exe,并把 tencent://… 地址作为第一个参数传递给 Timwp.exe。
复制代码- 程序代码:
- A protocol is a method that is used to send, receive, and handle information over a connection. Common protocols viewed from the browser include http, ftp, and mailto. In order for you to view information sent over a specific protocol, it must be registered. Once registered, the protocol can then be handled by the program you specify, such as your browser or a 3rd party viewer. This means that a hyperlink ( e.g. foo://fred ) can use the handler for protocol foo to open the file named fred.
- Contents [hide]
- 1 Registering an unsupported protocol
- 1.1 Windows
- 1.2 Linux
- 1.3 OS X
- 2 Redirecting a registered protocol
- [edit]Registering an unsupported protocol
- Mozilla products utilize protocols defined internally, as well as those defined by the operating system. You can add the ability to use an unsupported protocol by registering it. The OS-specific method of doing this is described below.
- [edit]Windows
- Create the registry .reg file, replacing foo with your unregistered protocol, and the path with whatever handler program you want to run. Then merge it into the Windows registry.
- REGEDIT4
- [HKEY_CLASSES_ROOT"foo]
- @="URL:foo Protocol"
- "URL Protocol"=""
- [HKEY_CLASSES_ROOT"foo"shell]
- [HKEY_CLASSES_ROOT"foo"shell"open]
- [HKEY_CLASSES_ROOT"foo"shell"open"command]
- @="""C:""Program Files""Application""program.exe"" ""%1"""
- See Registering an Application to a URL Protocol for additional information.
- [edit]Linux
- Registration is unnecessary. Simply associate whatever proto: with a program through Firefox: Example: Add the sip: protocol to launch kphone for VoIP calls in Firefox:
- - Type about:config into the address bar
- - Right-click create new boolean value: network.protocol-handler.external.sip and set to true
- - Right-click create new boolean value: network.protocol-handler.warn-external.sip and set to false
- - Right-click create new string value: network.protocol-handler.app.sip and set to /usr/bin/kphone
- This will actually launch kphone. Not sure if it will dial though. That is untested :)
- You can also optionally register the protocol with whatever window manager you are using. In KDE this is done through Control Center - KDE Components - File Associations. This step is usually unnecessary unless your window manager has a custom browser, such as konqueror.
- [edit]OS X
- Probably very similar to Linux (above).
- [edit]Redirecting a registered protocol
- If the protocol is already handled by the browser, you can specify what program will be used as a handler to open the file. To do this, add the pref:
- network.protocol-handler.app.foo as a string with value C:"Program Files"Application"program.exe
- Note: If the path or name is incorrect, the browser will display an error saying "protocol (foo) isn't associated with any program". (See bug 312953).
- You may also need to use the following prefs, although this is uncertain:
- network.protocol-handler.external.foo = true
- network.protocol-handler.expose.foo = false
复制代码
|
|