2011-11-01 17 views
7

Mam manifest.json plik, który wygląda tak:Dlaczego chrome.extension.getBackgroundPage() zwraca wartość null?

{ 
    "name": "Zend Debugger Extension", 
    "version": "0.1", 
    "background_page": "background.html", 
    "permissions": [ 
    "cookies", "tabs", "http://*/*", "https://*/*" 
    ], 
    "browser_action": { 
    "default_title": "Launch Zend Debugger", 
    "default_icon": "icon.png", 
    "popup": "popup.html" 
    } 
} 

Oto mój background.html:

<html> 
    <script> 
    function testRequest() { 
     console.log("test Request received"); 
    } 
    </script> 
</html> 

A moja popup.html:

<script> 
function debug(target) { 
    if (target.id == 'thisPage') { 
     console.log('sending request'); 
     chrome.extension.getBackgroundPage().testRequest(); 
    } 
} 
</script> 

<div onclick="debug(this)" id="thisPage">Current Page</div> 

jednak background.html strona wydaje się być niedostępna. Dostaję taki błąd:

Uncaught TypeError: Cannot call method 'testRequest' of null 

Kiedy sprawdzać chrome.extension.getBackgroundPage() uzyskać wartość null. Myślę, że popełniłem błąd w pliku manifestu, ale nie widzę, co zrobiłem źle.

Dzięki.

Odpowiedz

1

Brakuje zgody tła, spojrzeć na mojego pliku manifest.json mojego chrom rozszerzenia:

{ 
    "content_scripts": [ 
    { 
     "matches": ["http://*/*"], 
     "js": ["jquery.js", "asserts.js"] 
    } 
    ], 
    "name": "Test Extension", 
    "version": "1.0", 
    "description": "A test extension to inject js to a webpage.", 
    "background_page": "background.html", 
    "options_page": "options.html", 
    "browser_action": { 
    "default_icon": "icon.png", 
    "popup": "popup.html" 
    }, 
    "permissions": [ 
    "tabs", 
    "http://*/*", "https://*/*", "<all_url>", "background" 
    ] 
} 

EDIT: Czy na pewno masz plik background.html w tym samym folderze co Wszystkie pliki Chrome-extension za ?, a jeśli tak, spróbuj odświeżyć swoje rozszerzenie ze strony kierownictwa rozszerzeń Pamiętam kiedyś błąd, że moje rozszerzenie nie przeładować, więc poszedłem do narzędzi dewelopera na mojej stronie w tle i wykonywane window.location.reload(true); z konsoli, która to naprawiła. Proszę o odpowiedź, czy to działa, będę badania

+0

Próbowałem dodanie pozwolenie tle, ale wciąż NULL podczas próby chrome.extension.getBackground () i ten sam błąd podczas działania skryptu. I rzeczywiście myślał pozwolenie tła związanego czy rozszerzenie nadal działa w tle, gdy wszystkie karty są zamknięte: http://code.google.com/chrome/extensions/manifest.html#permissions – AntBrown

+0

Czy na pewno masz tła. plik html w tym samym folderze co wszystkie pliki rozszerzeń chrome ?, a jeśli tak, spróbuj ponownie załadować swoje rozszerzenie ze strony zarządzania rozszerzeniami, pamiętam, że kiedyś miałem błąd, że moje rozszerzenie nie przeładowało się, więc poszedłem do narzędzi programisty dla mojej strony tła i wykonywanego window.location.reload (true); z konsoli, która to naprawiła. Proszę odpowiedzieć, jeśli to zadziałało, będę kontynuować badania. – ElHacker

+0

Ponowne załadowanie rozszerzenia naprawiło problem getBackgroundPage() = null. Dziękuję Ci. – AntBrown

2

Oto kolejna odpowiedź z kilku opcji:

chrome.extension.getBackgroundPage() returns null after awhile

According to the referenced page (Difference between Event and Background Page) there is a better option to get the background while still using Event Page :

If your extension uses, extension.getBackgroundPage, switch to runtime.getBackgroundPage instead. The newer method is asynchronous so that it can start the event page if necessary before returning it.

+0

Chociaż jest to bardzo, bardzo stare pytanie, które ma związek z manifestem w wersji 1, zanim strony wydarzeń były czymś. – Xan

+0

Czasy mogły się zmienić, ale pomogły mi przejść na właściwy tor! –

Powiązane problemy