Chrome扩展程序:如何将变量从内容脚本传递到background.html

时间:2011-01-12 22:53:04

标签: jquery ajax screen-scraping google-chrome-extension

我无法弄清楚如何将变量(或变量数组)从内容脚本传递到后台页面。我要做的是用我的内容脚本找到某些DOM元素,然后将它们发送到我的后台页面,这样我就可以用它们创建跨域XMLHttpRequest(将它们存储在不同站点的数据库中)。

我的代码如下。我知道名为“serialize”的变量没有被传递(我不希望它基于我当前的代码但是在那里有它所以它更容易看到我想要做什么。)那么我怎么能通过一个从内容脚本到后台页面的变量?

我的内容脚本:

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

我的背景页面:

   <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>

3 个答案:

答案 0 :(得分:1)

您是否在此代码中遗漏了"...php?serialize=' + serialize)"

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

应该是这样的:

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

答案 1 :(得分:0)

你的意思是:

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

修改

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

答案 2 :(得分:0)

我认为您的错误是访问序列化而不是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({});
  }

});