Javascript 在Mac OS X中控制iTunes的Chrome扩展
我正在为Google Chrome创建一个扩展,可以在iTunes(本机应用程序)中启动和停止播放,获取其媒体库的信息,等等。操作在Mac OS X 10.9.3 Mavericks中进行 我已经找到了Chrome运行时API,它有一些本机方法:Javascript 在Mac OS X中控制iTunes的Chrome扩展,javascript,macos,google-chrome-extension,itunes,messaging,Javascript,Macos,Google Chrome Extension,Itunes,Messaging,我正在为Google Chrome创建一个扩展,可以在iTunes(本机应用程序)中启动和停止播放,获取其媒体库的信息,等等。操作在Mac OS X 10.9.3 Mavericks中进行 我已经找到了Chrome运行时API,它有一些本机方法: chrome.runtime.sendNativeMessage(.., .., ..) chrome.runtime.connectNative(.., ..) 有关它们的描述,请参阅。它们允许向本机应用程序发送某种“消息”。我已成功为iTunes
chrome.runtime.sendNativeMessage(.., .., ..)
chrome.runtime.connectNative(.., ..)
有关它们的描述,请参阅。它们允许向本机应用程序发送某种“消息”。我已成功为iTunes创建了本机消息主机。我的第一次尝试是connectNative()
,但iTunes立即断开了连接。然后我向它发送了一条随机消息(我在后台页面中执行此操作):
现在我有两个问题:
一般来说,我需要在媒体库中执行搜索、开始播放特定歌曲、打开特定流的能力——所有这些都是由特定媒体上的不同用户操作触发的。基本上,我可以创建一个辅助cocoa应用程序作为这个扩展和iTunes之间的一个门户,它可以完美地处理iTunes的所有问题,但我很确定这是一个过分的做法,在扩展中存在一些方法来完成所有事情。我做了一些研究,阅读一年前的这篇文章,讨论从chrome使用iTunes的可能性 其次,它引用了Chrome media galleries API
我认为API提供了足够的信息来查找曲目。这不是一种与iTunes交互的方式,而是从库中访问数据的方式。不确定是否可以通过浏览器与iTunes软件进行通信(尽管这是一个有趣的想法)。本机消息传递要求本机可执行文件支持Chrome本机消息传递。具体而言: Chrome在单独的进程中启动每个本机消息传递主机,并 使用标准输入(stdin)和标准输出与it进行通信 (stdout)。相同的格式用于向两个方向发送消息: 每个消息都使用JSON、UTF-8编码进行序列化,并在前面加上前缀 具有本机字节顺序的32位消息长度 尽管我对这个话题没有做过任何研究,但我确信iTunes并不是为支持Chrome原生消息而编写的(这就是为什么它“立即断开连接”,因为它不知道你在尝试做什么),而且因为你没有iTunes的源代码,你将无法更改它 如果您知道如何使用您编写的其他本机可执行文件操作iTunes,那么您可以教该可执行文件通过Chrome本机消息传递,从而充当将您自己的音乐协议转换为iTunes操作的桥梁
chrome.runtime.sendNativeMessage(
host,
{text: "foo bar"},
function(response){
console.log(response);
// > Undefined
console.log(chrome.runtime.lastError.message);
// > "Native host has exited."
});