2012-07-15 19 views
22

Piszę rozszerzenie Chrome, które przekieruje mnie do adresu URL po kliknięciu ikony akcji przeglądarki.Dlaczego plik chrome.browserAction.onClicked jest niezdefiniowany?

Próbuję użyć:

chrome.browserAction.onClicked.addListener 

ale mam

Uncaught TypeError: Cannot read property 'onClicked' of undefined

To jest mój plik manifestu:

{ 
    "name": "first extension", 
    "version": "2.2.12", 
    "description": "redirct to a link icon", 
    "browser_action": { 
     "default_icon": "icontest.png", 
     "default_title": "Do action" 
    }, 
    "permissions": ["tabs", "http://*/*"], 
    "content_scripts": [{ 
     "matches": ["http://*.twitter.com/*", "https://*.twitter.com/*"], 
     "js": ["twterland.js"] 
    }], 
    "icons": { 
     "16": "icontest.png", 
     "48": "icontest.png", 
     "128": "icontest.png" 
    } 
} 

To jest mój plik js:

chrome.browserAction.onClicked.addListener(function(tab) { alert("hi"); }); 

Odpowiedz

15

Wygląda na to, że kod znajduje się w pliku twterland.js, który jest skryptem treści. browserAction można używać tylko na stronach rozszerzeń, więc nie można ich używać w skryptach treści.

dokumentu: https://developer.chrome.com/extensions/content_scripts

However, content scripts have some limitations. They cannot:
- Use chrome.* APIs (except for parts of chrome.extension)
- Use variables or functions defined by their extension's pages
- Use variables or functions defined by web pages or by other content scripts

umieścić go na background page zamiast.

25

Dla tych, którzy już dodali coś

"background": { 
    "scripts": ["background.js"] 
} 

i nadal jest Cannot read property 'onClicked' of undefined - wystarczy dodać

"browser_action": { 
    "default_icon": "icon.png" 
} 

do swojej manifest.json

+5

To szalone, ale działa – syonip

+1

To jest właściwie mój problem. Mój skrypt był już tłem. Po prostu nigdy nie zadeklarowałem żadnego "przeglądarki". –

+3

"Wyszukiwarka": {} 'jest wystarczające – Pacerier

7

Jeśli nie mają właściwość "browser_action" zdefiniowany w twoim manifest.json, wtedy ten błąd może wystąpić. Odpowiedź @ Kirill działa, ale musisz również dodać pusty plik icon.png, w przeciwnym razie chrome zwróci błąd, że nie może znaleźć takiego pliku.

Dodając to do pliku manifest.jsonpowinny stłumienia to błąd:

"browser_action": {} 

Koniecznie przeczytać documentation for further reference, w jaki sposób korzystać z ustawienia "browser_action".

+0

Mam zdefiniowane w moim manifeście działanie przeglądarki, nadal "chrome.pageAction" nie jest zdefiniowane w moim tekście skryptowym –

+0

@AlexanderMills Oryginalne pytanie dotyczyło 'chrome.browserAction', więc "nie jestem pewien co do" pageAction ". – Sgnl

+0

o mój Boże, masz rację, –

1

Byłem też coraz to dodając

"persistent": true 

do mojego oświadczenia tła w manifest.json rozwiązać go.

Powiązane problemy