0

假设我有一个指向客户端计算机上 MP3 的路径和文件名,以及一个指向他们的媒体播放器(例如 Winamp 或 VLC)的路径/文件名。如何使用他们的播放器播放 MP3?

Javascript 中是否有任何类型的 Shell() 功能?谷歌搜索“javascript shell”之类的结果提供了面向 js 执行环境的结果,而不是系统 shell,并且“javascript play mp3”(等)找到了插入<audio>元素的指令。我的谷歌搜索技能让我失望了......

非常感谢任何帮助!

4

2 回答 2

2

当您标记您的问题shell时,我猜您是在谈论命令行 JavaScript,而不是在 Web 浏览器中运行的 JavaScript。(如果你说的是在网络浏览器中运行的 JavaScript,答案当然是:你不能那样做,谢天谢地。)

对于命令行 JavaScript,如何执行此操作取决于您使用的 JavaScript 环境,答案应在该环境的文档中找到。我至少知道这些:

  • NodeJS - 你会使用这些process东西来启动播放器。
  • JScript - 您将使用该WshShell对象。
  • SilkJS - 你会使用这些builtin/process东西。
  • Rhino - Rhino 可以访问完整的 Java JDK,因此您可以使用其中一个exec功能Runtime或这些ProcessBuilder东西。

...但还有很多其他的。


在下面回复您的评论:

不幸的是,我说的是在浏览器中运行......

您可以尝试使用对应于 MP3 文件路径的 URL 向页面添加audio标签file://,甚至是a旧浏览器的标签,但这不会触发用户的音乐播放器,它只会(充其量)播放音乐浏览器。在最坏的情况下,它不会播放任何内容,因为该文件与您的页面的来源不同(请参阅Same Origin Policy,在这方面我没有播放过音频,但这里肯定存在 SOP 问题)。

这是非常非常好的原因,网页上的 JavaScript 不能在客户端计算机上执行任意程序。

于 2012-11-11T08:23:31.850 回答
1

感谢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 中播放曲目:)

当然,它需要用户执行注册表脚本,在批处理文件中指定可执行文件的路径,然后将其放在某个位置……但它可以工作!:)

于 2012-11-11T10:21:56.630 回答