我需要从浏览器(不仅限于IE)启动一个已安装应用程序。
从这个线程中了解到,我需要实现异步插件协议并注册应用程序到URI方案。
我想确认是否有其他实现方式?
在我的场景中,我需要从客户端机器启动一个现有的应用程序。那么,我可以注册此应用程序到URI方案并使用它吗?
我的唯一担忧是在两种情况(或至少第二种情况)下,我们都必须进行注册表更改。如果注册表设置不存在,这将无法工作。
是否有任何不依赖于注册表设置或任何先决条件的其他方法。
谢谢。
我需要从浏览器(不仅限于IE)启动一个已安装应用程序。
从这个线程中了解到,我需要实现异步插件协议并注册应用程序到URI方案。
我想确认是否有其他实现方式?
在我的场景中,我需要从客户端机器启动一个现有的应用程序。那么,我可以注册此应用程序到URI方案并使用它吗?
我的唯一担忧是在两种情况(或至少第二种情况)下,我们都必须进行注册表更改。如果注册表设置不存在,这将无法工作。
是否有任何不依赖于注册表设置或任何先决条件的其他方法。
谢谢。
如果没有你所描述的那些方法,就没有办法在浏览器外调用可执行文件(我可能会使用应用程序 URI 方案,因为这是你最少需要自定义插件的方式)。这是因为如果你可以调用任何应用程序,而不需要用户进行注册表编辑或其他相关更改,那么你可以��用户机器上的任何应用程序做任何想做的事情。这被称为沙箱技术,HOWTO GEEK 上有一篇不错的文章介绍了它。
沙盒是一个严密控制的环境,可以在其中运行程序。沙盒限制了代码的操作,只给予它必要的权限,而不会添加可能被滥用的额外权限。根据你的帖子,似乎Windows是你想要操作的系统。如果你想在另一个操作系统上进行此操作(或者其他人阅读此问题),方法将与你已经找到的不同(这些已经是Stack Overflow上的问题):
理论上,你可以为每个常用浏览器创建特定的插件或配置应用程序来执行完全自定义的操作。但是,你将需要相同的权限提升才能安装你的应用程序/插件,因此会重复发明轮子。此外,你还需要重新发明上述协议,并以某种方式预先分发应用程序以供安装。
有时候,当使用新的网络功能如摄像头访问和地理位置定位时,应用程序看起来会顺利地获得用户的浏览器体验。实际上,我们所看到的是一些新的JavaScript API,取代了Flash小应用和其他我们曾经需要通过第三方软件来控制的东西。webkitGetUserMedia
或mozGetUserMedia
)允许使用来自网络摄像头和麦克风的媒体。浏览器在允许此操作之前已经实现了权限提示,但该应用程序仍然是一个JavaScript应用程序。navigator.geolocation.getCurrentPosition(show_map);
它仍然只是一个JavaScript库。如果您使用它,this site建议添加一些错误处理/回退等。它从IE 9开始可用。查看该链接以获取其他浏览器信息。navigator.registerProtocolHandler
(从Mozilla文档here阅读更多)。但是,除了内置协议(例如mailto),您需要处理与调用此函数的域相同的Web应用程序中的URI。要设置处理程序,其中协议burger在链接<a href="burger:cheeseburger">this</a>
中将被处理,您可以编写:navigator.registerProtocolHandler("burger",
"http://www.google.co.uk/?uri=%s",
"Burger handler");
您可以在W3C规范中找到更多信息,包括其他白名单方案,但您需要仔细选择要支持的浏览器,并确保目标受众可以使用此功能。每当我想确定浏览器支持情况时,我都喜欢引用CanIUse。看起来Chrome和Firefox已经支持,而IE不支持。