2011-01-12 4 views
0

Je n'arrive pas à comprendre comment passer une variable (ou un tableau de variables) d'un script de contenu à une page d'arrière-plan. Ce que j'essaye de faire est de trouver certains éléments DOM avec mon script de contenu, puis de les envoyer sur ma page d'arrière-plan pour que je puisse faire un XMLHttpRequest interdomaine avec eux (les stocker dans une base de données sur un site différent).Extension Chrome: comment passer une variable de Content Script à background.html

Mon code est ci-dessous. Je sais que la variable nommée "sérialiser" n'est pas transmise (et je ne m'attends pas à ce qu'elle soit basée sur mon code actuel mais l'ai dans le code, donc c'est plus facile de voir ce que je veux faire). variable d'un script de contenu à une page d'arrière-plan?

Mon contenu Script:

function onText(data) { 
alert("Great Success!!"); 
}; 
$("#insertprofile").click(function(){ 
serialize = $(".certaininputs").serialize(); 
chrome.extension.sendRequest({'action' : 'insertprofile', 'serialize' : serialize}, onText); 
}); 

Mon arrière-plan Page:

<script> 
     function insertprofile(serialize) { 
     var xhr = new XMLHttpRequest(); 
     xhr.onreadystatechange = function(data) { 
      if (xhr.readyState == 4) { 
      if (xhr.status == 200) { 
       var data = JSON.parse(xhr.responseText); 
       callback(data); 
      } else { 
       callback(null); 
      } 
      } 
     } 
     var url = ('http://mysite.com/storeindatabase.php?' + serialize); 
     xhr.open('GET', url, true); 
     xhr.send(); 
     }; 
     function onRequest(request, sender, serialize) { 
     if (request.action == 'insertprofile') { 
      insertprofile(serialize); 
     } 
     }; 
     chrome.extension.onRequest.addListener(onRequest); 
    </script> 
+0

Avez-vous vérifié dans la console Inspecteur s'il y a des erreurs? (sur la page, et la page d'arrière-plan) –

Répondre

0

Voulez-vous dire:

chrome.extension.sendRequest({'action' : 'insertprofile', 'serialize': serialize}, onText); 

?

EDIT

function onRequest(request, sender, callback) { 
    if (request.action == 'insertprofile') { 
    insertprofile(request.serialize, callback); 
    } 
}; 
+0

Hmmm, peut-être. Cela ne fonctionne toujours pas pour moi cependant. –

+0

Hmmm, peut-être. Cela ne fonctionne toujours pas pour moi cependant. Par exemple, si je change le code en (... php? '+' Name = john '),' john 'est reçu par le script PHP et stocké dans ma base de données. Mais si je le change en (... php? '+ Serialize), le script php ne reçoit rien même si la valeur de serialize sur le script de contenu est name = john. Je suis donc sûr que la variable n'est toujours pas transmise à la page d'arrière-plan. Y a-t-il autre chose qui me manque? –

+0

@John Passez-vous serialize var à insertprofile()? – serg

0

Je pense que votre erreur accède au serialize au lieu de request.serialize.

function insertprofile(serialize) { 
     var xhr = new XMLHttpRequest(); 
     xhr.onreadystatechange = function(data) { 
      if (xhr.readyState == 4) { 
      if (xhr.status == 200) { 
       var data = JSON.parse(xhr.responseText); 
       callback(data); 
      } else { 
       callback(null); 
      } 
      } 
     } 
     var url = ('http://mysite.com/storeindatabase.php?' + serialize); 
     xhr.open('GET', url, true); 
     xhr.send(); 
     }; 


chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { 
    if (request.action == 'insertprofile') { 
      insertprofile(request.serialize); 
      sendResponse({}); 
    } 

}); 
1

"...php?serialize=' + serialize)" Avez-vous manque sur ce code:

var url = ('http://mysite.com/storeindatabase.php?' + serialize); 

Il est devrait ressembler à ceci:

var url = ('http://mysite.com/storeindatabase.php?serialize=' + serialize); 
+0

La variable "serialize" utilisée dans la question représente l'intention de ce que le demandeur aimerait. Ils recherchent un mécanisme pour transmettre des données du script à la page d'arrière-plan. –

Questions connexes