Javascript 在Mac OS X中控制iTunes的Chrome扩展

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

我正在为Google Chrome创建一个扩展,可以在iTunes(本机应用程序)中启动和停止播放,获取其媒体库的信息,等等。操作在Mac OS X 10.9.3 Mavericks中进行

我已经找到了Chrome运行时API,它有一些本机方法:

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."
    });