1

Grooveshark Javascript API를 사용하여 Grooveshark에서 노래를 재생하기위한 지침을 수신하기 위해 로컬 호스트 서버에 연결할 크롬 확장 프로그램을 만들고 싶습니다. (http://grooveshark.com/GroovesharkAPI.html) 예를 들어Grooveshark에서 노래를 재생하기위한 Chrome 확장자

, 내가 자바 스크립트 콘솔에서 window.Grooveshark.addSongsByID([13963],true)를 입력하면, 그것은 노래를 추가 할 것입니다 그리고 그것이 내가이 작업을 수행 할 수 있어야한다처럼 재생을 시작 확장자에서. 그래서 난 그냥 명령을 실행하는 배경 페이지와 확장 단지이 하나의 스크립트를 만들고 싶었다, 시작 :

background.html을

background.js

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

manifest.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" 
    } 
} 

아무도 왜 작동하지 않는지 말할 수 있습니까?

대단히 감사합니다!

+1

나는 100 % 확실하지 않다하지만 매니페스트 – JaredMcAteer

+0

아차, 그건 사실입니다 거기에 콤마 수 있습니다. 그래도 그것을 지적 주셔서 감사합니다. – Trevor

+0

확장 버튼을 마우스 오른쪽 버튼으로 클릭하고 아래쪽 옵션 "팝업 표시"또는 이와 유사한 옵션을 선택할 수 있습니다. 확장 프로그램의 오류를 인쇄하는 콘솔이 있습니다. – Lycha

답변

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 기능을 주입 한 다음 필요할 때 호출 할 수 있습니다.

+0

Nice! 고맙습니다. 그래서 나는 contentScript.js라는 파일에 함수를 가지고 있는데, ''content_scripts ': [ { "js": [ "contentScript.js"], "matches": [http : // * .groovshark.com/* "] } ]"매니페스트에 대해 "Uncaught ReferenceError : injectJs가 정의되지 않았습니다." 내가 뭘 놓치고 있니? – Trevor

+0

사실, 그 스크립트를 background.html에 추가하면, 어떤 에러도 내지 않지만 작동하지 않습니다 ... = ( – Trevor

+0

@Trevor 아마 bg 페이지에서 스크립트를 호출했을 때 ' 아직로드되지 않았습니까? 콘텐츠 스크립트가 완전히로드 된 페이지 이후에 호출해야합니다. – serg

0

나는 이것을 거의 투명하게 만들기 위해 래퍼를 작성했다. 스크립트 삽입 솔루션은 또한이 프록시가 수행하는 동안 함수에서 반환 값을 가져 오지 못하게합니다.

콘텐츠 스크립트에 이것을 포함시키고 window.Grooveshark 대신 GroovesharkProxy에서 메서드를 호출하십시오.

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

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

+0

와우, 좋아! 감사! – Trevor

+0

링크가 끊어졌습니다. –

관련 문제