更新chrome扩展弹出文本

时间:2018-01-01 01:44:47

标签: javascript html google-chrome-extension

我正在尝试制作一个Chrome扩展程序,根据您所在的网站显示弹出窗口中的不同文本。

当点击扩展图标时,popup.js会询问当前网站的background.js,以及它是否为"生产性"一个(在代码中明确定义)。 根据返回的内容,popup.js使用.innerHTML将popup.html中的文本更改为" Productive Site"或"非生产性网站"

除了一个bug之外,所有代码都有效。在"生产"之间切换时并且"非生产性的"网站,第一次按下扩展图标显示旧状态。再次按下它会将弹出窗口的文本更新为正确的状态。

例如,如果" facebook.com"被认为是非生产性的" google.com"被认为是富有成效打开google.com并点击扩展程序图标即可显示"高效网站"。然后打开facebook.com并点击图标显示"高效网站"。关闭弹出窗口并再次正确打开它会显示"非生产性网站"。

我认为这是问题所在:虽然我在加载其余的html内容之前先调用popup.js脚本,但获取信息需要更长的时间。当它返回时,弹出内容已经使用先前已知的文本加载"生产/非生产性"。

这是我第一次使用javascript或html,所以我很丢失。任何帮助是极大的赞赏。谢谢!

popup.html:

<script src="popup.js"></script>
<html>
<head>
    <title>Site Popup</title>
</head>
<body>
    <p> This text should change: </p>
    <p id = "test" > text</p>
</body>
</html>

popup.js:

chrome.runtime.getBackgroundPage(function (backgroundPage) {
  if (backgroundPage.getSite()) {
   document.getElementById("test").innerHTML = "Unproductive Site";
  } else {
  document.getElementById("test").innerHTML = "Productive Site";

background.js中的相关代码:

var hostName
function getCurrentTab() {
  chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
    var tab = tabs[0];
    var tabURL = tab.url; // gets url of current tab
    hostName = getHostName(tabURL);  // gets host name of the url
  } 
  )};

function getSite() {   // used in popup.js
  getCurrentTab();
  return isUnproductiveSite(hostName); // checks if the current hostName is one of the listed "unproductive" sites.
                                       // Returns true if unproductive, false if not.
}

更新(回应评论)

你是对的,我没有考虑它的异步方面。但是,我仍然对如何传递这些值感到困惑。我更多地了解了回调函数,但在我的具体案例中它们并没有帮助。 我意识到代码可以简化为:

background.js

function getCurrentTab() {
  chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
    var tab = tabs[0];
    var tabURL = tab.url;
    var hostName = getHostName(tabURL);
    var isUnprod = isUnproductiveSite(hostName)
  }
  )};

popup.js

chrome.runtime.getBackgroundPage(function (backgroundPage) {
    var result = backgroundPage.getCurrentTab());

popup.js中的实际结果是未定义的,我意识到这是因为getCurrentTab没有任何东西可以返回。我的问题是:如何将isUnprod的值发送到popup.js?我尝试使用回调函数,但它没有帮助将值从background.js传递给popup.js

再次感谢您的帮助。

0 个答案:

没有答案