1

我想制作一个 chrome 扩展,它将连接到本地主机服务器,以接收使用 Grooveshark Javascript API 在 Grooveshark 中播放歌曲的指令。(http://grooveshark.com/GroovesharkAPI.html)

例如,如果我window.Grooveshark.addSongsByID([13963],true)在 javascript 控制台中输入,它会添加歌曲并开始播放,如果我需要能够从扩展程序执行此操作。所以一开始,我只是想用一个背景页面做一个扩展,只用这个脚本来执行命令:

背景.html

<!doctype html>
<html>
    <head>
        <script src="background.js"></script>
    </head>
    <body>
    </body>
</html>

背景.js

chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(
    null, {code:"window.Grooveshark.addSongsByID([13963],true)"});
});

清单.json

{
  "name": "Play song in Grooveshark",
  "version": "0.1.0",
  "background_page": "background.html",
  "permissions": [
    "tabs", "http://*/*"
  ],
  "browser_action": {
    "name": "Play song",
    "default_icon": "icon.png"
  }
}

谁能告诉我为什么它不起作用?

非常感谢!!

4

2 回答 2

1

内容脚本无法访问父页面的window对象。您需要<script>使用代码将标签注入页面。

//bg page
chrome.tabs.executeScript(null, {
    code: "injectJs('window.Grooveshark.addSongsByID([13963],true)')"
});

//content script
function injectJs(code) {
        var scr = document.createElement("script");
        scr.type = "text/javascript";
        scr.text = code;
        (document.head || document.body || document.documentElement).appendChild(scr);
}

您可以通过清单向所有页面注入injectJs函数,然后在需要时调用它。

于 2011-11-03T18:05:07.093 回答
0

我写了一个包装器来使它几乎透明。脚本注入解决方案也不允许您从函数中获取任何返回值,而此代理可以。

将此包含在您的内容脚本中,并在 GroovesharkProxy 而不是 window.Grooveshark 上调用方法。

https://github.com/msfeldstein/Grooveshark-Chrome-Extension-Proxy

http://www.macromeez.com/use-groovesharks-js-api-from-a-chrome-extension/

于 2012-02-10T09:44:17.203 回答