为什么grabCurrentURL()没有返回当前网址

时间:2015-08-04 22:31:22

标签: javascript google-chrome-extension

在我的Google Chrome扩展程序的popup.js中,我有:

function sendWebResponse(hash) {
  var xmlhttp = new XMLHttpRequest(); 
  xmlhttp.open("POST", "http://localhost:3000/tasks/4123434/from_chrome");
  xmlhttp.setRequestHeader("Content-Type", "application/json");
  xmlhttp.setRequestHeader("Accept", "application/json");
  xmlhttp.setRequestHeader('Authorization', 'Token token=463c121664d98a6dafd1086e8d0ecca0');
  xmlhttp.send(JSON.stringify(hash));  
}

function grabCurrentUrl(url) {
  chrome.tabs.query(
    {'active': true, 'lastFocusedWindow': true}, 
      function (tabs) {
        var url = tabs[0].url;
        return url;
      }
)};

以下作品:

function submitTrue(id) {
  sendWebResponse({"survey": id,"result": "true");
}

但以下情况并非如此:

function submitTrue(id) {
  var url = grabCurrentUrl();
  sendWebResponse({"survey": id,"result": "true", "url": url});
}

在这种情况下,urlnull。当我这样做时肯定有一个活动标签。

为什么grabCurrentURL()没有抓取有效标签的当前网址?

1 个答案:

答案 0 :(得分:0)

所以他们都说它是异步的。您可以将getCurrentUrl更改为:

function getCurrentUrl(callback) {
    chrome.tabs.query({ active: true, lastFocusedWindow: true }, function (tabs) {
        if (tabs.length > 0) { 
           callback(tabs[0].url);    
        }
        return null;
    });
}

然后将submitTrue更改为:

function submitTrue(id) {
  getCurrentUrl(function(url) {
      sendWebResponse({"survey": id,"result": "true", "url": url});
  });
}