javascript - 从嵌套函数返回当前 URL - Chrome 扩展

标签 javascript function google-chrome-extension return

我正在尝试制作一个 Chrome 扩展来获取当前所选选项卡的 URL,但遇到了一个问题,无法获取存储 URL 的变量来返回。

我已经尝试了几件事,但这是我期望工作的代码:

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 扩展,所以每一个建议都会有所帮助。

最佳答案

方法 chrome.tabs.query 是异步的,因此需要回调来返回结果。

当您使用异步调用时,您可以使用以下任何方式处理结果:

  • 回调
  • promise
  • 异步/等待

请检查这个问题: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);
});

关于javascript - 从嵌套函数返回当前 URL - Chrome 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47699906/

相关文章:

database - Haskell - 格式问题

javascript - MongoDB $or 用于 $match 阶段内的两个字段

java - 如果使用 DWR 和 java 而不是 AJAX 和 PHP,我们必须在 JqGrid 中进行哪些更改?

javascript - 已修复 : Wordpress site Uncaught TypeError: jQuery(. ..).live 不是导致带有 JS 的图像不显示的函数

python - 如何重命名内置函数,例如 "if"-> "hehe"、 "elif"-> "haha"、 "else"-> "hihi"?

javascript - 关闭 Chrome 扩展中的当前选项卡

javascript - 在 Obj C 中,如何添加 SVG 蓝图图像并渲染 UIWebView 中的数据?

php - php中如何分离返回值?

javascript - 如何处理 "Unchecked runtime.lastError: The message port closed before a response was received"?

javascript - Uncaught ReferenceError : X is not defined