要求:我们希望通过按钮或链接从网页启动外部比较工具(如 BeyondCompare 或 WinMerge)。文本文件路径应在启动时传递给该工具,以便它理解它们并在左侧和右侧比较面板中打开它们。
尝试过的解决方案:
1) 使用JavaScript 的 ActiveXObject:用户可以简单地单击按钮/链接并启动安装在其机器上的比较工具。但它只适用于 Internet Explorer,所以我们不能这样做。
2) 使用Java Applet:出于安全原因,嵌入在浏览器中的Applet 不允许访问本地文件系统,并且会抛出“访问控制异常”。因此,我们也不能这样做。
Ref:为什么我的小程序会抛出 AccessControlException?
3) 使用协议处理程序:我们可以设置自定义的 URL 协议来触发程序。就像我们使用 mailto:user@email.com 语法创建电子邮件链接一样,这将自动启动 Windows 上的 Outlook。“mailto”是 Windows 注册表中的预定义协议。
同样,我们创建了自己的协议,在注册表中说“launchCompareTool”,并且能够启动任何应用程序,如 WinMerge 或 BeyondCompare。但是,我们无法实现将左侧和右侧文件路径作为参数传递给应用程序。可能是启动的应用程序需要期待这些参数。
参考:http : //www.dreamincode.net/forums/topic/220444-run-program-from-server-on-client-computer/ http://msdn.microsoft.com/en-us/library/aa767914% 28v=vs.85%29.aspx#app_reg
与“mailto”协议不同,“mailto”协议将“body”和“subject”参数传递给理解它们的邮件客户端(如 Outlook)。这些比较工具没有可以从协议传递的参数。
还有其他方法可以满足这个要求吗?
谢谢,阿卜杜勒