1

ローカルホストサーバーに接続して、GroovesharkJavascriptAPIを使用してGroovesharkで曲を再生するための指示を受け取るChrome拡張機能を作成したいと思います。(http://grooveshark.com/GroovesharkAPI.html)

たとえばwindow.Grooveshark.addSongsByID([13963],true)、javascriptコンソールに入力すると、曲が追加され、拡張機能からこれを実行できるようにする必要がある場合と同じように再生が開始されます。まず、バックグラウンドページと、コマンドを実行するためのこの1つのスクリプトを使用して拡張機能を作成したかっただけです。

background.html

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

background.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

これをほぼ透明にするためにラッパーを作成しました。スクリプトインジェクションソリューションでは、関数から戻り値を取得することもできませんが、このプロキシでは取得できます。

これをコンテンツスクリプトに含め、window.GroovesharkではなくGroovesharkProxyのメソッドを呼び出します。

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 に答える