Chrome扩展程序在第一次尝试时无法获取网址

时间:2015-01-15 11:30:27

标签: javascript jquery google-chrome-extension

我有一个带有popup.html页面的Google Chrome扩展程序。

页面加载时启动的唯一脚本是:

document.addEventListener('DOMContentLoaded', function () {
    window.domain = "";
    chrome.tabs.getSelected(function (tabs) {
      window.domain = tabs.url;
      console.log(window.domain);
    });
    window.enabled = true;
    domain = window.domain;
    checkStatus();

});

函数checkStatus是:

function checkStatus() {
  if (enabled === true) {
    $(".status").html("Enabled");
    $(".statusContainer").css("background-color", "rgb(24, 150, 71)");
    $(".powerButton").attr("src", "images/enabled.png");
    $(".questionContainer").show("fast");
    $(".domain").html("on " + window.domain);
  }
  else if (enabled === false){
    $(".status").html("Disabled");
    $(".statusContainer").css("background-color", "rgb(102, 102, 102)");
    $(".powerButton").attr("src", "images/disabled.png");
    $(".questionContainer").hide("fast");
  }
}

然而,当我点击分机的图标打开页面时,我只看到" on"而不是google.com上的""例如。当我检查弹出窗口并切换到控制台并再次运行checkStatus时,扩展程序会在google.com上显示""例如,如果我在谷歌上。

我不确定是什么导致这种情况,但是console.log显示了应该的url,所以我认为这是checkStatus函数的一个问题,因为当我打开它时选项卡被加载弹出窗口。

1 个答案:

答案 0 :(得分:1)

这是异步的典型问题

chrome.tabs.getSelected的回调部分很可能在您调用checkStatus() 之后被称为,这将导致window.domain仍然是空字符串{{1 }}

解决方案:您应该从回调中调用""

checkStatus()