javascript - chrome.browserAction.setBadgeText 可以从脚本加载字符串吗?

标签 javascript jquery google-chrome google-chrome-extension google-chrome-devtools

我知道使用以下内容将在我的 Google Chrome 扩展程序上加载带背景的文本,并将其 chop 为前四个字母。

chrome.browserAction.setBadgeBackgroundColor({ color: [255, 0, 0, 255] });
chrome.browserAction.setBadgeText ( { text: "loading" } );

但是我想做的是允许显示 js 脚本的字符串结果的部分显示 loading 。我已经在网络和 StackOverflow 上查看了答案,但我还没有找到与我想要做的事情相关的任何内容,因此我决定在这里提出问题。

我的manifest.json已加载后台,js:

"background": {
  "scripts":["background.js"]
}

background.js -然后在 background.js 中,我一直试图通过加载 number.js 的结果来让它工作> 但我就是无法让它发挥作用。我知道这里的代码是错误的,因为我把它弄乱了,但我将包含它,以便您可以了解我正在尝试做什么:

var imported = document.createElement('script');
imported.src = 'number.js';
document.head.appendChild(imported);

chrome.browserAction.setBadgeBackgroundColor({ color: [255, 0, 0, 255] });
chrome.browserAction.setBadgeText ( { text: "loading" } );

chrome.tabs.executeScript(null,
{code:"globalVarName = {'scriptOptions': {...}};" },
chrome.tabs.executeScript(null, {file: "number.js"},

number.js - 然后我最终尝试加载的是 number.js 中的字符串:

var ip = "chromahills.net";

var xhr = new XMLHttpRequest();
xhr.open("GET", "http://minecraft-api.com/v1/get/?server=" + ip, true);
xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
                data = JSON.parse(xhr.responseText);
                if (data.status) {
                        document.write(data.players.online);
                } else {
                        document.write("Fail");
                }
        }
}

xhr.send();

问题

所以,为了开门见山,我的问题如下:

  • 是否可以在 .setBadgeText 中包含 JavaScript 字符串?
  • 如果是这样,最有效的方法是什么?

我知道这是一个相当长的文本 block ,但我尝试包含尽可能多的细节,以便您可以理解我正在尝试做什么,并希望解释一种更好的方法来完成我正在做的事情,即使它是实际上是可能的。

编辑

我已经删除了我的进度以避免混淆,现在问题已解决。如果您想查看我尝试过的内容,请单击此处 -> http://jsfiddle.net/lukexf/5d72Q/或阅读下面的解决方案

最佳答案

当然,您可以在 .setBadgeText 中显示 Javascript 字符串,事实上,这是您可以在那里显示的唯一内容:-)

所以,我试图理解你的问题的诀窍......我认为你想以某种方式调用 number.js,然后检索输出(document.write的部分 写入屏幕)。

但这将是错误的方法。

为什么不直接在background.js中实现以下代码(您可以在其中轻松访问badgeText)?

var ip = "chromahills.net";

var xhr = new XMLHttpRequest();
xhr.open("GET", "http://minecraft-api.com/v1/get/?server=" + ip, true);
xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
            data = JSON.parse(xhr.responseText);
            if (data.status) {
                    chrome.browserAction.setBadgeText ( { text: data.players.online.toString() } );
            } else {
                    chrome.browserAction.setBadgeText( { text: "Fail" });
            }
    }
}

xhr.send();

关于javascript - chrome.browserAction.setBadgeText 可以从脚本加载字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23869539/

相关文章:

javascript - 如何重构我的函数,使其适用于多个 div?

javascript - 创建内容为 Latex、文本和图像的 PDF

JavaScript 突然无法读取值

JavaScript - 如何获取 DOM 元素的第一个子元素的文本?

javascript - 如何找到父键未知的子键的值?

javascript - Angular ng-repeat orderBy 多个字段作为一个字段

html - 在 chrome 中选择粗体的下拉选项

html - 在浏览器中禁用表单验证

javascript - 在 jQuery 动画效果中用背景图像替换背景颜色

javascript - 谁能告诉我为什么我的按钮不显示内容?