需求: 我们想通过一个按钮或链接从网页启动外部比较工具(如BeyondCompare或WinMerge)。应该在启动时将文本文件路径传递给该工具,因此它可以理解并在左侧和右侧比较面板中打开它们。
尝试的解决方案:
1)使用JavaScript的ActiveXObject:用户只需单击按钮/链接,即可启动安装在其计算机上的比较工具。但它仅在Internet Explorer中有效,所以我们不能采用这种方法。
参考:How to run an external program, e.g. notepad, using hyperlink? 2)使用Java Applet:由于安全原因,在浏览器中嵌入的applet不被允许访问本地文件系统,并且会抛出“Access Control Exception”。因此,我们也无法采用这种方法。
参考:Why is my applet throwing an 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"协议不同,它具有"body"和"subject"参数,可以传递给邮件客户端(如Outlook),后者可以理解它们。这些比较工具没有此类参数,可以从协议传递。
还有其他方法可以满足这个要求吗?
谢谢, Abdul
1)使用JavaScript的ActiveXObject:用户只需单击按钮/链接,即可启动安装在其计算机上的比较工具。但它仅在Internet Explorer中有效,所以我们不能采用这种方法。
参考:How to run an external program, e.g. notepad, using hyperlink? 2)使用Java Applet:由于安全原因,在浏览器中嵌入的applet不被允许访问本地文件系统,并且会抛出“Access Control Exception”。因此,我们也无法采用这种方法。
参考:Why is my applet throwing an 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"协议不同,它具有"body"和"subject"参数,可以传递给邮件客户端(如Outlook),后者可以理解它们。这些比较工具没有此类参数,可以从协议传递。
还有其他方法可以满足这个要求吗?
谢谢, Abdul