Javascript browserAction.setBadgeText不是';在tabs.executeScript回调中使用时正在执行t
我正在做我的第一个Chrome扩展。我有一个默认的弹出窗口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:"
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
有时没有定义。