Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从javascript启动程序/应用程序,就像某些站点打开torrent程序一样_Javascript_Bittorrent - Fatal编程技术网

如何从javascript启动程序/应用程序,就像某些站点打开torrent程序一样

如何从javascript启动程序/应用程序,就像某些站点打开torrent程序一样,javascript,bittorrent,Javascript,Bittorrent,我知道javascript不能在客户机上启动/打开/运行程序/应用程序。但我还是想知道如何打开一个程序。我知道浏览器的沙箱不允许javascript做这些事情,甚至javascript规范也没有在其规范中指定javascript支持的此类功能 现在我想问一些网站如何能够启动安装在我机器上的torrent程序?通常,当我点击MagnetTorrent时,浏览器会显示一个对话框,显示是否启动应用程序。这些网站(如eBay等)是如何启动torrent程序的?您可能在谈论磁铁:协议。 要手动定义新协议

我知道javascript不能在客户机上启动/打开/运行程序/应用程序。但我还是想知道如何打开一个程序。我知道浏览器的沙箱不允许javascript做这些事情,甚至javascript规范也没有在其规范中指定javascript支持的此类功能


现在我想问一些网站如何能够启动安装在我机器上的torrent程序?通常,当我点击MagnetTorrent时,浏览器会显示一个对话框,显示是否启动应用程序。这些网站(如eBay等)是如何启动torrent程序的?

您可能在谈论磁铁:协议。

要手动定义新协议并将程序绑定到它,您只需创建一个简单的注册表项。 查看我用来安装公司内部协议处理程序的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客户端是Flouge,这是它在注册表中的外观:(HKEY_CLASSES_ROOT/magnet/…)

您可能在谈论磁铁:协议。

要手动定义新协议并将程序绑定到它,您只需创建一个简单的注册表项。 查看我用来安装公司内部协议处理程序的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客户端是Flouge,这是它在注册表中的外观:(HKEY_CLASSES_ROOT/magnet/…)

您必须了解,没有用户交互(出于明显的安全原因),网页(理论上)无法在用户机器上启动程序

当您单击web链接时(例如,从http://或https://开始),您的浏览器知道如何处理该链接,并直接打开相关页面

当您单击以特定协议(如callto://或magnet://)开头的链接时,浏览器不知道如何处理它(至少第一次),因此会询问用户该怎么做。它通常显示兼容程序的列表

海盗湾只是使用magnet协议通知您的浏览器链接包含支持此协议的程序可以利用的信息


您可以使用JavaScript在自定义协议上模拟用户交互。例如,启动Skype呼叫:
window.location.href=callto://helloworld“
。同样的原理也适用于启动torrent下载(通过磁铁链接)。

您必须了解,没有用户交互(出于明显的安全原因),网页(理论上)无法在用户机器上启动程序

当您单击web链接时(例如,从http://或https://开始),您的浏览器知道如何处理该链接,并直接打开相关页面

当您单击以特定协议(如callto://或magnet://)开头的链接时,浏览器不知道如何处理它(至少第一次),因此会询问用户该怎么做。它通常显示兼容程序的列表

海盗湾只是使用magnet协议通知您的浏览器链接包含支持此协议的程序可以利用的信息


您可以使用JavaScript在自定义协议上模拟用户交互。例如,启动Skype呼叫:
window.location.href=callto://helloworld“
。同样的原理也可以用于启动torrent下载(通过磁铁链接)。

您可以将URL方案绑定到程序。这可能会对您有所帮助:您可以将URL方案绑定到程序。这可能会帮助您:Registry.ClassesRoot.CreateSubKey(“NAMEOFPROTOCOL”)的值是多少?是“磁铁”吗?第二行也是如此。磁石协议?或者myurl:magnet协议?FILEPATH的值是多少?它是torrent应用程序安装目录的路径吗?看看我的编辑,这就是它在注册表中的外观。是的,如果要将程序设置为“magnet”协议的处理程序,“NAMEOFPROTOCOL”应该是“magnet”。如果单击该协议的链接,文件路径将指向应该启动的应用程序。Registry.ClassesRoot.CreateSubKey(“NAMEOFPROTOCOL”)的值是多少?是“磁铁”吗?第二行也是如此。磁石协议?或者myurl:magnet协议?FILEPATH的值是多少?它是torrent应用程序安装目录的路径吗?看看我的编辑,这就是它在注册表中的外观。是的,如果要将程序设置为“magnet”协议的处理程序,“NAMEOFPROTOCOL”应该是“magnet”。Filepath指向在单击该协议的链接时应启动的应用程序。