通过浏览器调用本地程序通常被认为是危险的行为,是被禁止的,但在基于B/S架构的一体机项目中会用到关闭或重启操作系统的操作。此时需要在前端页面有相应的功能按钮并能实现相应的功能。
通过浏览器调用本地应用程序通常需要使用浏览器扩展或本地应用程序与浏览器之间的通信,这种通信需要通过自定义URL协议来实现,本文就以win10操作系统为例一步步的实现一个通过浏览器按钮重启操作系统的小案例。
1.自定义URL协议
在本地系统上注册一个自定义的URL协议,并在浏览器中创建一个链接,当用户点击该链接时,会触发本地应用程序打开。这个方法可以让你通过浏览器来启动本地程序。
例如,在Windows上,你可以注册一个自定义的URL协议,比如myapp://
,然后在HTML中创建一个链接:
<a href="myapp://open">打开本地程序</a>
当用户点击这个链接时,浏览器将尝试启动关联的本地应用程序。
我们的本地应用程序很简单就是一个重启系统的批处理文件。我们在E盘根目录下新建一个“reboot.bat”批处理文件,写入以下内容。
@echo off
shutdown /r /t 0
💁♂ 为了后面的操作,建议先双击这个批处理文件,看看是否能正常重启系统。
下面就是自定义URL协议的步骤:
- 打开注册表编辑器(Registry Editor)。你可以按下
Win + R
键,然后输入regedit
并按回车键来打开它。
2.转到以下注册表项(如果没有则需要创建):
HKEY_CLASSES_ROOT\<your_protocol>
其中 <your_protocol>
是你想要注册的自定义协议的名称,例如 myapp
。
💁♂ 在新建myapp
项时注意要为默认子项添加URL:myapp
URL名称,并新建一个名称为URL Protocol
的空子项。
-
在这个注册表项下,创建一个子项
shell
,并在shell
下创建一个子项open
。 -
在
open
子项下创建一个字符串值(String Value),并将其命名为command
。 -
设置
command
的值为你的本地应用程序可执行文件的路径,包括可执行文件的名称。例如:"C:\path\to\your\app.exe"
- 至此你新建URL的工作已经完成,接下来就可以在浏览器中使用
myapp://
打开上述新建的本地应用程序了。
2.编写HTML代码
新建一个简单的HTML页面,写入以下内容。
<html>
<head>
<title>this is a test</title>
</head>
<a href="myapp://">打开本地程序</a>
</html>
3.验证
通过以上步骤,我们的准备工作已经完成,下面就打开浏览器,来验证是否能够通过浏览器上的按钮来实现重启操作系统的目标。
💁♂ 第一次运行时浏览器会弹出安全提示,此时要采允许。有些杀毒软件也会禁止该操作,也要选择允许才可以。
4.导出自定义的URL注册表项
本案例通过修改了windows的注册表添加自定义的URL,大部分程序员对windows注册表并不太熟悉,稍有不甚就有可能把系统干崩溃,所以在操作注册表的时候要小心。
在通过验证可以生效的自定义URL注册项,可以通过导出注册表项的方式在相同的操作系统中进行快速分享。
4.1 导出注册表项
打开注册表,找到我们要导出的注册表项,右键选择导出。
导出范围选择所选分支,并指定文件名和位置就可以导出注册表项了。
完成上述操作后,在你的导出位置就出现了一个myapp.reg
的文件,这个文件就是我们前面自定义的URL注册项。
4.2 导入注册表项
如果其他相同版本的windows用户也需要使用相同的自定义URL注册表项,我们就不需要通过打开注册表一项项的手动添加了,只需要将上一步我们导出的注册表项复制到目标系统中,通过双击myapp.reg
就可以快速导入了。
以上就是一个简单的使用浏览器操作本地应用程序的小例子,大家可以举一反三应用到自己的应用中去。