[Google Chrome extensie] Background page lijkt niet te laden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Devilly
  • Registratie: Januari 2009
  • Niet online
Momenteel ben ik bezig om een extensie voor Google Chrome te schrijven. Hierbij maak ik gebruik van een background page (Background Pages). Deze gebruik ik om de communicatie tussen een browser action (Browser Actions) en een Node.JS server te verzorgen. Dit gaat allemaal goed, zolang ik de background page ook daadwerkelijk in een tab in de browser heb geopend. Zodra dit niet het geval is, valt ook al zijn functionaliteit weg. De background page doet dus niet waar hij voor gemaakt is. :P In manifest.json staat de volgende declaratie:

JSON:
1
"background-page": "background.html"


Via Google heb ik hier niets over kunnen vinden. Vaak gaan de pagina's over de ontdekking van background pages door verwonderde gebruikers of iets wat daar op lijkt. Kan iemand mij een zet in de goede richting geven?

PS: ik twijfelde of dit topic hier of in Webdesign, Markup & Clientside Scripting moest komen te staan, omdat het niet daadwerkelijk een echte website betreft. Hopelijk heb ik goed gegokt. :)

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 22-05 08:46

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Misschien handig als je ook even relevante(!) (snippets) code plaatst van betreffende pages?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Devilly
  • Registratie: Januari 2009
  • Niet online
RobIII schreef op woensdag 21 december 2011 @ 14:23:
Misschien handig als je ook even relevante(!) (snippets) code plaatst van betreffende pages?
Ik kon niet direct verzinnen welke hier daadwerkelijk relevant zijn, gezien de (voor mijn gevoel) algemene aard van het probleem. Desondanks hier een paar regels code die het communicatiepad tussen de browser action, via de background page, naar de server toelichten. Te beginnen met de browser action:

JavaScript:
1
2
3
4
5
6
7
8
chrome.extension.sendRequest(
    {
        type:"message",
            
        username:textarea_username.value,
        message:textarea_message.value
    }
);


In de background page staat het volgende:

JavaScript:
1
2
3
4
5
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    if(request.type === "message"){
        socket.send(request);
    }
});


Hiermee stuur ik de request, welke afkomt van de browser action, door naar de server. Deze vangt het bericht op deze manier op:

JavaScript:
1
2
3
4
5
6
7
8
9
socket.on('message', function (message) { 
    for(var index = 0; index < clients.length; index++){
        var temporary = clients[index];

        //if(temporary !== this){
            temporary.send(message);
        //}
    }
});


Zoals hopelijk wel duidelijk is, komt hij hier echter nooit aan. Een probleem is ook dat de background page alleen is te debuggen als hij geopend is en dan doet het probleem zich niet voor.

Overigens maak ik gebruik van Socket.IO. Deze laat standaard ook een, soort van, log zien in de console die ik open heb staan. Daarin komt o.a. het volgende naar voren:
info - handshake authorized 1809170451762832435
debug - setting request GET /socket.io/1/websocket/1809170451762832435
debug - set heartbeat interval for client 1809170451762832435
debug - client authorized for
debug - websocket writing 1::
info - transport end
debug - set close timeout for client 1809170451762832435
debug - cleared close timeout for client 1809170451762832435
debug - cleared heartbeat interval for client 1809170451762832435
debug - discarding transport
De 'handshake authorized' gebeurt pas op het moment dat ik de background page in een tab laad. (In de background page is een JavaScript geïnclude dat een connectie met de server opent.) De 'transport end' komt naar voren op het moment dat ik dezelfde tab weer afsluit. Op geen enkel ander moment gebeuren deze dingen.

Dit alles spreekt er dus voor dat de background page daadwerkelijk niet in de achtergrond wordt geladen.

[ Voor 27% gewijzigd door Devilly op 21-12-2011 14:59 ]


  • Devilly
  • Registratie: Januari 2009
  • Niet online
Dat was toch een hele stormloop van reacties. ^^ Desondanks heb ik het, uiteindelijk, opgelost. Dit gebeurde helaas wel met een dikke anticlimax. In mijn openingpost zei ik dat in mijn manifest.json het volgende staat:

JSON:
1
"background-page": "background.html"


Helaas moet de - een _ zijn:

JSON:
1
"background_page": "background.html"


Nu was dit natuurlijk een slordigheidsfoutje, maar toch vraag ik me af waarom hiervan nergens een melding wordt gemaakt als de extensie in developer mode geïnstalleerd is. :/

  • RobIII
  • Registratie: December 2001
  • Laatst online: 22-05 08:46

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

:D Dat zijn inderdaad van de klote-foutjes waar je uren overheen kunt kijken, laat staan dat ze iemand hier zouden opvallen; het gebeurt, daar niet van, maar je moet dan wel verdomd scherp zijn :P
Desalniettemin fijn dat je even post wat 't probleem was! d:)b

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij