我知道javascript无法在客户端计算机上启动/打开/运行程序/应用程序。但我仍然想知道如何打开一个程序。我知道浏览器的沙盒不允许javascript做这些事情,甚至javascript规范也没有在其规范中指定javascript支持这种功能。
现在我想问一些网站如何能够启动我机器上安装的torrent程序?通常当我点击磁铁洪流时,浏览器会显示一个对话框是否启动应用程序。这些网站如piratebay等如何能够启动torrent程序?
答案 0 :(得分:3)
你可能在谈论磁铁:协议
要手动定义新协议并将程序绑定到它,您只需创建一个简单的注册表项即可。
查看我用来安装公司内部协议处理程序的C#代码段。
RegistryKey rk;
rk = Registry.ClassesRoot.CreateSubKey("NAMEOFPROTOCOL");
rk.SetValue("", "URL:NAMEOFPROTOCOL protocol"); // "" = (Standard)
rk.SetValue("URL Protocol", "");
rk = rk.CreateSubKey("shell");
rk = rk.CreateSubKey("open");
rk = rk.CreateSubKey("command");
rk.SetValue("", "FILEPATH" + @"""%1"""); // gives the XXX of protocol:XXX to the called program as first argument
注册表类位于命名空间“Microsoft.Win32”中
此代码需要管理员权限才能运行。
查看以下注册表项,我的默认Torrent客户端是Deluge,这是它在注册表中的样子:(HKEY_CLASSES_ROOT / magnet / ...)
答案 1 :(得分:1)
您必须明白,网页不能(理论上)在没有用户交互的情况下在用户计算机上启动程序(出于明显的安全原因)。
当您点击网页链接时(例如以http://或https://开头),您的浏览器知道如何处理它并直接打开相关页面。
当您点击以特定协议(例如callto://或magnet://)开头的链接时,浏览器不知道如何处理它(至少第一次),所以询问用户该做什么。它通常显示兼容程序列表。
Pirate Bay正在使用磁铁协议通知您的浏览器该链接包含可由支持该协议的程序利用的信息。
您可以使用JavaScript模拟自定义协议上的用户交互。例如,要开始Skype通话:window.location.href = 'callto://helloworld'
。同样的原则可用于启动洪流下载(通过磁力链接)。