我尝试制作一个获取当前所选标签的网址的Chrome扩展程序,但我遇到了一个问题,我无法获取该网址存储的变量回来。
我已经尝试了几件事,但这是我期望工作的代码:
function getStream() {
alert(getLinking());
}
function getLinking() {
chrome.tabs.query({
'active': true,
'windowId': chrome.windows.WINDOW_ID_CURRENT
},
function getURL(tabs) {
var URL = tabs[0].url;
return URL;
}
);
return getURL();
}
document.addEventListener('DOMContentLoaded', function () {
document.getElementById('start').addEventListener('click', getStream);
});
然而,它并没有实际返回任何内容,因此警报并未显示。请注意,返回变量URL对我来说非常重要,所以我可以在getStream函数中使用它,只需在getURL函数中添加警报就不是我正在寻找的东西
如果有人能帮助我,那将是非常棒的,我对javascript还不太熟悉,而且我对chrome扩展特别不熟悉,所以每一点建议都可以提供帮助。
答案 0 :(得分:1)
方法chrome.tabs.query
是异步的,因此需要回调才能返回结果。
当您使用异步调用时,您可以使用任何处理结果:
请检查此问题:How do I return the response from an asynchronous call?
根据您的代码,最简单的解决方案是:
function getStream() {
getLinking(function(URL) { // passing a callback
alert(URL)
});
}
function getLinking(callback) { // callback - is a function that will be called when async call finished
chrome.tabs.query({
'active': true,
'windowId': chrome.windows.WINDOW_ID_CURRENT
},function(tabs) {
callback(tabs[0].url); // run callback with a result
}
);
// do not need to return anything
}
document.addEventListener('DOMContentLoaded', function () {
document.getElementById('start').addEventListener('click', getStream);
});