Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript browserAction.setBadgeText不是';在tabs.executeScript回调中使用时正在执行t_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript browserAction.setBadgeText不是';在tabs.executeScript回调中使用时正在执行t

Javascript browserAction.setBadgeText不是';在tabs.executeScript回调中使用时正在执行t,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我正在做我的第一个Chrome扩展。我有一个默认的弹出窗口popup.html,它加载popup.js 我用serg的来作为弹出->页面交互的灵感 问题在于popup.js中的以下单击处理程序可以工作: function click(e) { chrome.browserAction.setBadgeText ( { text: "loading" } ); chrome.tabs.executeScript(null, {code:"

我正在做我的第一个Chrome扩展。我有一个默认的弹出窗口
popup.html
,它加载
popup.js

我用serg的来作为弹出->页面交互的灵感

问题在于
popup.js
中的以下单击处理程序可以工作:

function click(e) {
    chrome.browserAction.setBadgeText ( { text: "loading" } );
    chrome.tabs.executeScript(null,
        {code:"globalVarName = {'scriptOptions': {...}};" },
        chrome.tabs.executeScript(null, {file: "js/script.js"},
            chrome.browserAction.setBadgeText ( { text: "done" } ))
    );
    window.close();
}
但以下情况并非如此:

function click(e) {
    chrome.browserAction.setBadgeText ( { text: "loading" } );
    chrome.tabs.executeScript(null,
        {code:"globalVarName = {'scriptOptions': {...}};" },
        chrome.tabs.executeScript(null, {file: "js/script.js"},
            function(){chrome.browserAction.setBadgeText ( { text: "done" } );})
    );
    window.close();
}
我想在完成任务后能够做不止一件事

编辑: 我意识到第一个案例会立即执行
chrome.browserAction.setBadgeText()
,而不是在脚本完成执行后执行。所以这种情况可以忽略不计。为了反映这一点,我重新编写了问题标题


我要寻找的是为什么第二个案例的回调根本不执行。

我很确定罪魁祸首是关闭弹出窗口的
window.close()
。执行此代码的同一弹出窗口(除了在实际页面上执行的
script.js

因此,从未执行过回调。当然,我这里只讨论案例2(请参阅我对问题的编辑)

我的最新完整工作代码适用于任何未来访客:

var tabId = null;
function click(e) {
    chrome.browserAction.setBadgeText ( { text: "..." } );
    chrome.tabs.executeScript(tabId, 
        {code:"globalVarName= {...}" }, 
        function(){ 
            chrome.tabs.executeScript(tabId, {file: "js/script.js"},
                function(){chrome.browserAction.setBadgeText ( { text: "done" } );
                    setTimeout(function() { 
                        chrome.browserAction.setBadgeText ( { text: "" } ); 
                    }, 1000);
                }
            ); 
        } 
    );
}

还要注意,脚本的路径(
script.js
此处)是相对于扩展源根的,即
manifest.json
所在的位置。

一旦我弄清楚了事实,我就意识到了同样的事情。你确定
script.js
实际执行时没有任何错误吗?我猜:)。对嗯,它大部分时间都在执行。有时未定义
globalVarName
。如果您愿意,我可以将
script.js
的内容添加到问题中。您确定它会一直执行吗?在结尾放上一个警告的方式可以帮助你发现,如果你在这方面有问题。我认为这个实验比发布代码要有用得多——要么有效,要么无效……等等,当然这永远不会像你想的那样有效,你的第二个executeScript不应该包装在匿名函数中吗?因为它是来自initital executeScript的回调???@urbananimal也犯了同样的错误。这应该可以解释为什么
globalVarName
有时没有定义。