Comment faire une requête POST à l'aide d'AJAX dans une Extension Chrome?

Je suis tenter de faire un appel ajax lorsque le navigateur est sur ma page web, il fonctionne parfaitement, mais dès que je quitte mon domaine, il échoue. C'est pour un système fermé que l'utilisateur sait qu'ils sont suivis donc rien ombragé passe. Je reçois un message d'erreur 406 sur tout ce qui sort de mon domaine. Par exemple, si j'ai sur mon url de www.mywebpage.com le script s'exécute parfaitement, mais dès que je visite www.yourwebpage.com elle renvoie l'erreur.

J'ai essayé la configuration les autorisations dans le manifeste.json à l'adresse de ma page, toutes les url, url, mais il se comporte de la même manière. Voici mon background.js

chrome.runtime.onMessage.addListener
(
    function(message, sender, sendResponse) 
    {
        if(message.applicationcode=="VALIDAPPLICATIONKEY")
        {
            var salt=message.salt;
            var learnerid=message.learnerid;
            var behaviorkey=message.behaviorkey;
            var behaviorname=message.behaviorname;
            var behaviorkeyname=message.behaviorkeyname;
            chrome.tabs.query
            (
                {active: true}, 
                function(arrayOfTabs) 
                {
                    var data = new FormData();
                    data.append('Salt', salt);
                    data.append('LearnerID', learnerid);
                    data.append('BehaviorKey', behaviorkey);
                    data.append('BehaviorName', behaviorname);
                    data.append('BehaviorKeyName', behaviorkeyname);
                    data.append('BehaviorValue', arrayOfTabs[0].url);
                    var xhr = new XMLHttpRequest();
                    xhr.open('POST', 'https://www.mywebpage.com/myservice.php', true);
                    xhr.onreadystatechange = function() 
                    {
                        if (xhr.readyState == 4) 
                        {
                            //JSON.parse does not evaluate the attacker's scripts.
                            var resp = JSON.parse(xhr.responseText);
                            console.log(resp);
                        }
                    }
                    xhr.send(data);     
                }
            );//end query
            return true;
        }
    }
);//end listener

Voici mon fichier de manifeste.

{
    "manifest_version": 2,
    "name": "Application",
    "description": "Plugin",
    "version": "1.0",
    "background": 
    {
        "scripts": ["jquery.js","background.js"],
         "persistent": true
    },
    "permissions": [
        "tabs","http://www.mywebpage.com/*","https://www.mywebpage.com/*"

    ],
    "browser_action": 
    {
        "default_icon": "icon.png",
        "default_popup": "popup.html"
    },
    "content_scripts": 
    [
        {
            "matches": ["<all_urls>"],
            "js": ["jquery.js","popup.js"]
        }
    ]
}

Toute pensée ou de l'aide sur ce serait grandement apprécié. Selon la documentation de ici ce que je suis en train de faire est autorisée par les extensions et ne travaillent dans une manière limitée. Ou si ce type d'action prenant place dans le prolongement de la page comme l'a suggéré ici? Je suis nouveau à l'écriture d'extensions pour Chrome et je suis sûr que je suis absent quelque chose de stupide.

Merci d'avance.

  • Votre fichier manifeste est ici crucial.
  • D'intérêt, pourquoi avez-vous return true dans le onMessage auditeur? Il raconte Chrome de s'attendre à ce sendResponse être appelée de façon asynchrone, mais il n'arrive pas dans votre extrait de code.
  • C'était une recommandation de ce link . J'ai été à récurer le Débordement de Pile pour une solution :). Si il n'est pas nécessaire, s'il vous plaît aidez-moi à comprendre pourquoi, par opposition à la réponse de l'autre article. Merci pour le fou de la réponse rapide!
  • Dans la réponse que vous avez lié resp === sendResponse, donc sendResponse est en fait appelé. Dans votre code, vous ne l'utilisez pas.
  • Cela prend tout son sens. J'ai été à l'origine à l'aide de sendResponse mais modifiée à cause de ce problème.
  • Modifié pour inclure le fichier de manifeste.
  • Faire de l'ajax de fond pas de contenu
  • La requête ajax est venue de l'arrière-plan.