在HTML中,是否可以通过'onclick'运行.exe或.bat文件?

38

是否可以使用HTML5按钮事件运行.bat或可执行文件?在IE中,如果我没记错的话,可以使用Shell对象实现。


2
请查看此链接如何使用HTML应用程序执行本地文件? - coolprarun
@coolprarun,我也确认了您提供的链接在我的环境中可以工作(Win8.1IE11。但不适用于FF27)。您应该将其发布为答案。 - IsaacS
5个回答

39

不行,那将是一个巨大的安全漏洞。想象一下,如果有人能够运行

format c:

每当你访问他们的网站时。


24

以下是我的做法。我希望在我们的网络上设置一个HTML页面,这样我就不必浏览各种文件夹来安装或升级应用程序了。所以我在我们每个人都可以访问的“共享”驱动器上设置了一个.bat文件,在那个.bat文件中,我有这段代码:

start /d "\\server\Software\" setup.exe

HTML代码如下:

<input type="button" value="Launch Installer" onclick="window.open('file:///S:Test/Test.bat')" />

(请确保您的反斜杠符号是正确的,我之前使用了错误的方式,导致它无法正常工作)

我更喜欢直接启动EXE文件,但这不可能,不过.bat文件可以解决这个问题。希望它能在Firefox或Chrome中运行,但只能在IE中运行。


亲爱的@Chuff,如果批处理文件有注册命令,比如 REG ADD "HKCU\Software\...",那该怎么办? - Hosein Aqajani
1
这在Firefox、Edge和Chrome上不再起作用了!只有IE可以使用。 - Jan Rothkegel
@Tivi https://dev59.com/NnA75IYBdhLWcg3w3NPf如何从浏览器启动应用程序 - The incredible Jan

17

当页面本身通过 file:/// 路径打开时,这是可能的。

<button onclick="window.open('file:///C:/Windows/notepad.exe')">
    Launch notepad
</button>

然而,一旦您将其放在web服务器上(即使通过http://localhost/访问它),您将会收到一个错误:

Error: Access to 'file:///C:/Windows/notepad.exe' from script denied


1
+1 我刚确认这在IE11上可行,但在Win8.1上的Firefox 27上不行。 - IsaacS
1
@IsaacS 很抱歉我无法提供Windows 8的帮助,因为我没有使用该系统。但是,我刚刚在Windows 7上使用Firefox 28测试了一下,它可以正常工作,所以这个额外的安全措施可能只适用于Windows 8。 - user247702
4
这使得可以“下载”notepad.exe,而不是运行它。Firefox 31,Windows 7。 - mp04
@nodiscc 实际上,Firefox 默认不允许您运行可执行文件,但通常会有像 OpenDownload² 这样的扩展程序来允许您这样做。 - user247702
2
@Stijn 在这种情况下执行的文件是你刚刚“下载”的文件,而不是原始文件。因此,在大多数情况下它不起作用 - 它不允许你运行已经安装在你的机器上的程序。 - mp04
@nodiscc 正确,它不是从原始应用程序执行,而是从缓存中执行。它能否正常工作取决于可执行文件是否需要访问其目录中的其他文件。感谢您的评论。 - user247702

6
你可以在Internet Explorer上使用OCX组件,在Chrome浏览器上使用Chrome扩展程序(参考chrome文档)。无论哪种情况,客户端系统都需要进行额外的设置!
重要的是要注意Chrome扩展程序的源代码部分:
var port = chrome.runtime.connectNative("your.app.id"); 
      port.onMessage.addListener(onNativeMessage); 
      port.onDisconnect.addListener(onDisconnected);
      port.postMessage("send some data to STDIO");

权限文件:

{
      "name": "your.app.id",
      "description": "Name of your extension",
      "path": "myapp.exe",
      "type": "stdio",
      "allowed_origins": [
            "chrome-extension://IDOFYOUREXTENSION_lokldaeplkmh/"
      ]
}

以及Windows注册表设置:

HKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts\your.app.id
REG_EXPAND_SZ : c:\permissionsettings.json

1
你无法直接在用户本地机器或通过网站运行/执行.exe文件。用户必须先下载exe文件,然后运行可执行文件。
因此,没有可能的方法
以下代码仅在用户机器上存在EXE时才有效。 <a href = "C:\folder_name\program.exe">

2
亲爱的@coolprarun,如果我在用户机器上有一个.bat文件,如何使用JavaScript或其他方法在Chrome中运行该.bat文件?我可以通过ActiveXObject在IE浏览器中完成此操作,但是该对象不适用于Chrome。 - Hosein Aqajani
当然可以。通过自定义URL协议 -> https://dev59.com/NnA75IYBdhLWcg3w3NPf - The incredible Jan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接