Javascript 如何在客户端启动桌面应用程序

Javascript 如何在客户端启动桌面应用程序,javascript,Javascript,在我的网页中,如果安装了桌面应用程序,我必须在客户端计算机上启动它。你知道我该怎么做吗 如果应用程序是MS Office或Adobe Reader,我知道如何启动它们,但我要启动的应用程序是自定义应用程序。你在网上找不到它 如何打开应用程序?首先,您不能在任何可移植机制中使用javascript 如果应用程序是ms office或adobe reader,我知道如何启动它们 不,您不知道-您知道如何发送文档,浏览器将该文档与这些应用程序关联并调用它们,并提供响应的本地副本的名称。你不能只是启动程

在我的网页中,如果安装了桌面应用程序,我必须在客户端计算机上启动它。你知道我该怎么做吗

如果应用程序是MS Office或Adobe Reader,我知道如何启动它们,但我要启动的应用程序是自定义应用程序。你在网上找不到它


如何打开应用程序?

首先,您不能在任何可移植机制中使用javascript

如果应用程序是ms office或adobe reader,我知道如何启动它们

不,您不知道-您知道如何发送文档,浏览器将该文档与这些应用程序关联并调用它们,并提供响应的本地副本的名称。你不能只是启动程序

你只需要为你的应用程序做同样的事情——发明一个新的mime类型(主要类型是“应用程序”,按照惯例,非标准次要类型的前缀是“x-”,因此你可以使用application/x-hguser),然后将该mime类型与相关的程序浏览器端关联


i、 e:您需要明确地配置每个浏览器,除非应用程序注册一个协议来触发它,否则基本上是不可能实现的。如果这样做了,那么您需要做的就是使用此协议提供一个链接

你的customapp://some.parameters

第三方应用程序与浏览器集成的另一种方式是将其作为插件连接。这就是flash应用程序的工作原理等等


如果您尝试启动的应用程序不支持类似的内容,那么要实现您的目标几乎是不可能的。

单靠JavaScript无法做到这一点。(不,即使使用微软Office或Adobe Reader也不行。)谢天谢地

有许多老方法,包括,可能适合您的需要。正如其他人在键入时指出的那样,您可以根据mime类型或协议等定制响应


不管你怎么看,你都需要控制最终用户的浏览器。如果您处于一个封闭的环境中,您可以指定策略(用户必须使用具有特定配置的特定浏览器),那么您需要这样做。对于一个无法控制最终用户的开放环境,你就没有运气了。

浏览器沙盒禁止你执行本地资源,这是有充分理由的——阻止网站用恶意代码破坏你的盒子。我一直在研究相同的功能

我找到的唯一解决方案是在Mozilla Firefox中构建一个可以启动应用程序的扩展。扩展位于沙箱之外,因此它们可以执行本地资源。请参阅以了解如何做到这一点。您可以使用跨浏览器来完成这项工作,尽管我还没有在这方面取得成功

您也可以构建一个从web服务填充的厚客户端,并通过上述扩展从浏览器启动。这就是我为了绕过沙箱而做的。我用这个


有关更多讨论,请参阅。

事实上,我现在在这方面取得了很多成功。它是一个PHP客户机/服务器应用程序框架,从运行在Apache中的服务器deamon提供XUL/JavaScript应用程序。您可以从XULRunner中的一个非常瘦的客户端访问应用程序,也可以使用扩展从网页上访问应用程序。客户端可以在任何平台上执行,并且它们位于浏览器沙箱之外,因此您可以访问本地资源,例如可执行文件。这是一个相当优雅的解决方案,他们的网站提供了很好的例子和文档,他们的论坛反应非常迅速。事实上,我在向本地可执行文件传递参数时发现了一个小错误,发布了一个关于论坛的问题,首席开发人员在不到15分钟的时间内修复了这个问题。总的来说,非常令人印象深刻

我已经在一些复杂的生产环境中遇到了这个问题

我使用以下代码来实现这个技巧:

function launch(p_app_path)
{
   var oShell = new ActiveXObject("WScript.Shell");
   oShell.Run('"' + p_app_path + '"', 1);
}
在IE选项>安全性>自定义级别>ActiveX控件和插件>初始化和脚本ActiveX控件(未标记为脚本安全)中,将值设置为Ask或Active

当您的网站包含在特定的安全上下文中时,这不是一个安全问题。
正如他们所说,建造一座天然气厂是不值得的。

你为什么不让用户自己打开程序?你为什么要设计网页,为什么不让用户查看源代码???这正是要求。您能否提供一个链接,其中包含有关关联自定义mime类型的详细信息?这对于我试图在封闭环境中解决的问题可能非常有用。能否提供一个链接来解释如何定义和注册这样的协议?应用程序必须已经在客户端计算机上运行,或者至少某些代理必须在客户端计算机上运行。它必须在某个端口上侦听。这是我目前确定的方法,但我缺少一点:如何触发应用程序在页面加载时“仅运行”?似乎协议处理程序是API,仅限于需要用户交互(用户实际单击),但我只希望应用程序在页面加载时启动。我不介意是否有安全警告等(正如任何协议处理程序链接所预期的那样)。。。我只想让它燃烧起来。有什么想法吗?注册这样一个协议你可以看看。我在Chrome版本58.0.3029.81中对此进行了测试。在chrome中唯一不起作用的是在地址栏中键入协议,这在其他浏览器中似乎也能起作用。这太棒了!!创建一个监听端口的小型服务器,通过get请求远程触发它,并让该应用程序执行任务。为什么我没有想到这一点!这只适用于IE,还是其他浏览器?