[英]How can I use Javascript to play an MP3 stored on the clients machine using their installed media player?
假设我有一个指向客户端计算机上的MP3的路径和文件名,以及一个指向其媒体播放器(例如Winamp或VLC)的路径/文件名。 如何使用他们的播放器播放MP3?
Javascript中是否有任何Shell()功能? 谷歌搜索“ javascript shell”之类的结果提供面向js执行环境的结果,而不是系统shell,而“ javascript play mp3”(等)找到用于插入<audio>
元素的指令。 我的谷歌搜索技能使我失望...
任何帮助,不胜感激!
当您标记了问题shell
我想您是在说命令行JavaScript, 而不是在Web浏览器中运行的JavaScript。 (如果您谈论的是在Web浏览器中运行的JavaScript,那么答案当然是:您不能这样做,谢谢Goodness。)
对于命令行JavaScript,如何执行取决于您所使用的JavaScript环境,并且应该在该环境的文档中找到答案。 我至少知道这些:
process
来启动播放器。 WshShell
对象。 builtin/process
东西。 Runtime
或ProcessBuilder
上使用其中一个exec
函数。 ...但是还有很多其他的。
在下面重新发表您的评论:
不幸的是,我说的是在浏览器中运行...
您可以尝试将audio
标签添加到带有file://
文件路径的file://
URL的页面上,或者甚至是旧浏览器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中播放音轨:)
当然,它需要用户执行注册表脚本,在批处理文件中指定可执行文件的路径,然后将其放在特定位置...但是可以! :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.