假设我有一个指向客户端计算机上 MP3 的路径和文件名,以及一个指向他们的媒体播放器(例如 Winamp 或 VLC)的路径/文件名。如何使用他们的播放器播放 MP3?
Javascript 中是否有任何类型的 Shell() 功能?谷歌搜索“javascript shell”之类的结果提供了面向 js 执行环境的结果,而不是系统 shell,并且“javascript play mp3”(等)找到了插入<audio>
元素的指令。我的谷歌搜索技能让我失望了......
非常感谢任何帮助!
假设我有一个指向客户端计算机上 MP3 的路径和文件名,以及一个指向他们的媒体播放器(例如 Winamp 或 VLC)的路径/文件名。如何使用他们的播放器播放 MP3?
Javascript 中是否有任何类型的 Shell() 功能?谷歌搜索“javascript shell”之类的结果提供了面向 js 执行环境的结果,而不是系统 shell,并且“javascript play mp3”(等)找到了插入<audio>
元素的指令。我的谷歌搜索技能让我失望了......
非常感谢任何帮助!
当您标记您的问题shell
时,我猜您是在谈论命令行 JavaScript,而不是在 Web 浏览器中运行的 JavaScript。(如果你说的是在网络浏览器中运行的 JavaScript,答案当然是:你不能那样做,谢天谢地。)
对于命令行 JavaScript,如何执行此操作取决于您使用的 JavaScript 环境,答案应在该环境的文档中找到。我至少知道这些:
process
东西来启动播放器。WshShell
对象。builtin/process
东西。exec
功能Runtime
或这些ProcessBuilder
东西。...但还有很多其他的。
在下面回复您的评论:
不幸的是,我说的是在浏览器中运行......
您可以尝试使用对应于 MP3 文件路径的 URL 向页面添加audio
标签file://
,甚至是a
旧浏览器的标签,但这不会触发用户的音乐播放器,它只会(充其量)播放音乐浏览器。在最坏的情况下,它不会播放任何内容,因为该文件与您的页面的来源不同(请参阅Same Origin Policy,在这方面我没有播放过音频,但这里肯定存在 SOP 问题)。
这是非常非常好的原因,网页上的 JavaScript 不能在客户端计算机上执行任意程序。
感谢TJ Crowder的建议,我找到了一个(可能的)解决方案:创建一个协议处理程序。
这是我创建的注册表文件:
Windows Registry Editor Version 5.00
[-HKEY_CLASSES_ROOT\playmp3]
[HKEY_CLASSES_ROOT\playmp3]
@="URL:playmp3 Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\playmp3\shell]
[HKEY_CLASSES_ROOT\playmp3\shell\open]
[HKEY_CLASSES_ROOT\playmp3\shell\open\command]
@="C:\\Program Files (x86)\\PlayMP3\\playmp3.bat %1"
如果用户将其导入他们的注册表,然后进入playmp3://E:\My Music\My Really Cool Song.mp3
浏览器地址栏将触发我的批处理文件:
@ECHO OFF
SET "url=%1"
SET "player=C:\Program Files (x86)\Winamp\winamp.exe"
SETLOCAL EnableDelayedExpansion
SET url=!url:playmp3://=!
SET url=!url:/=!
"%player%" "%url%"
ENDLOCAL
...从字符串中剥离“playmp3://”(协议)并将其传递给 Winamp.exe :)
这样做,我成功地在页面上创建了一个链接,单击该链接后,开始在 Winamp 中播放曲目:)
当然,它需要用户执行注册表脚本,在批处理文件中指定可执行文件的路径,然后将其放在某个位置……但它可以工作!:)