2013-06-09 16 views
9

Zasadniczo próbuję zrobić małe rozszerzenie chrome po dokumentacji Google. Chciałbym wstrzyknąć skrypt za każdym razem, gdy kliknięto przycisk rozszerzenia. To jest mój manifest do tej pory:Metoda ExecuteScript

{ 
    "name": "Example", 
    "manifest_version": 2, 
    "version": "1.0", 
    "permissions": [ 
    "tabs" 
    ], 
    "description": "My Chrome extension.", 
    "browser_action": { 
    "default_icon": "icon.png" 
    }, 
    "background": { 
    "scripts": ["background.js"] 
    } 
} 

a to mój background.js:

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript(tab.id, {code: "content_script.js"}); 
}); 

Problemem jest to, że nie jest zwolniony content_script, nawet starając się taka prosta alert("aaa");

Czy możesz mi powiedzieć, co robię źle? Nie mogę tego rozgryźć.

Odpowiedz

12

Aby wykonać skrypt treści na stronie, należy zażądać poprawnych uprawnień hosta w pliku manifestu.

Ponieważ chcesz wstawić skrypt treści po kliknięciu przycisku akcji przeglądarki, wystarczy poprosić o numer activeTab permission. Co więcej, możesz zrzucić uprawnienie tabs, aby zmniejszyć liczbę zerową do permission warnings!

{ 
    "name": "Example", 
    "manifest_version": 2, 
    "version": "1.0", 
    "permissions": [ 
    "activeTab" 
    ], 
    "browser_action": { 
    "default_icon": "icon.png" 
    }, 
    "background": { 
    "scripts": ["background.js"] 
    } 
} 

(Pozwolenie activeTab została introduced in Chrome 26. Jeśli trzeba wspierać Chrome 25 i wcześniej, dodać uprawnienia *://*/* lub <all_urls> do pliku manifestu).

Uwaga: jeśli dodasz oddzwanianie do chrome.tabs.executeScript, byś otrzymał przydatnych komunikat o błędzie w chrome.runtime.lastError.message:

nie można uzyskać dostępu do zawartości URL „http .....” Extension oczywistych musi prosić o pozwolenie na uzyskaj dostęp do tego hosta.

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript(tab.id, { 
     file: "content_script.js" 
    }, function() { 
     if (chrome.runtime.lastError) { 
      console.error(chrome.runtime.lastError.message); 
     } 
    }); 
}); 
+0

Tak, to zrobić trick i również dziękuję za obsługę wyjątków. Ta odpowiedź jest bardzo wyczerpująca. – fillobotto

+0

Czy "content_script.js", który chciałem, nie jest w stanie edytować zawartości aktualnej karty? Nie wydaje się tak. Na przykład mogę odzyskać wartość pola tekstowego, ale nie mogę go ustawić. – fillobotto

+0

@fillobotto Powinieneś być w stanie ustawić wartość. Czy możesz pokazać, co próbujesz? –

6

Ponadto naprawić Roba należy używać {file: "content_script.js"}

+0

Dobrze zauważony. Obecnie 'content_scripts.js' jest postrzegany jako kod zamiast pliku, ponieważ' 'code" 'został użyty zamiast' "plik'" - patrz ['chrome.tabs' # InjectDetails] (https://developer.chrome. com/extensions/tabs.html # type-InjectDetails) –

Powiązane problemy