Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.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 值出现在console.log中,但在通过innerHTML分配时未定义_Javascript_Google Chrome Extension_Youtube - Fatal编程技术网

Javascript 值出现在console.log中,但在通过innerHTML分配时未定义

Javascript 值出现在console.log中,但在通过innerHTML分配时未定义,javascript,google-chrome-extension,youtube,Javascript,Google Chrome Extension,Youtube,我试图在我的分机上点击一个按钮时获取YouTube视频的时间戳。现在,我的代码设置如下: contentScript.js var time; function get_timestamp() { time = document.getElementsByClassName('video-stream')[0].currentTime console.log(time); return time; }; chrome.runtime.onMessage.addListe

我试图在我的分机上点击一个按钮时获取YouTube视频的时间戳。现在,我的代码设置如下:

contentScript.js

var time;
function get_timestamp() {
    time = document.getElementsByClassName('video-stream')[0].currentTime
    console.log(time);
    return time;
};

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        if (request.message === "pause_video") {
        pause_video();
        }

        if (request.message === "get_time") {
            sendResponse({timestamp: get_timestamp()})
        }
    }
);
function get_time() {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
    chrome.tabs.sendMessage(tabs[0].id, {message: "get_time"}, function(response) {
        console.log(response.timestamp.toString());
        return response.timestamp.toString();
    });
})
};
document.getElementById("time").innerHTML = get_time();
暂停功能也在同一文件中定义,并按预期工作

popup.js

var time;
function get_timestamp() {
    time = document.getElementsByClassName('video-stream')[0].currentTime
    console.log(time);
    return time;
};

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        if (request.message === "pause_video") {
        pause_video();
        }

        if (request.message === "get_time") {
            sendResponse({timestamp: get_timestamp()})
        }
    }
);
function get_time() {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
    chrome.tabs.sendMessage(tabs[0].id, {message: "get_time"}, function(response) {
        console.log(response.timestamp.toString());
        return response.timestamp.toString();
    });
})
};
document.getElementById("time").innerHTML = get_time();
popup2.js

var time;
function get_timestamp() {
    time = document.getElementsByClassName('video-stream')[0].currentTime
    console.log(time);
    return time;
};

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        if (request.message === "pause_video") {
        pause_video();
        }

        if (request.message === "get_time") {
            sendResponse({timestamp: get_timestamp()})
        }
    }
);
function get_time() {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
    chrome.tabs.sendMessage(tabs[0].id, {message: "get_time"}, function(response) {
        console.log(response.timestamp.toString());
        return response.timestamp.toString();
    });
})
};
document.getElementById("time").innerHTML = get_time();

popup2.js中的行位于按下按钮时调用的函数中。作为测试的一部分,脚本被分为两个文件,但如果需要,可以将它们组合起来。程序的其余部分按预期工作,暂停视频和从url获取视频ID的功能正常工作。所有console.log命令都显示视频的当前时间戳,但在使用innerHTML时,我总是无法定义。我觉得这应该很简单,但我想不出问题出在哪里。

这能回答你的问题吗<代码>获取时间不返回任何内容<代码>日志是从异步调用的函数内部调用的。这是一个独立于
return
ing的机制。根据我从链接中了解到的情况,
get\u time
函数是异步的,因为它正在传递消息并等待响应?因此,如果我在那里使用return-promise,解析为
response.timestamp
,那么它应该工作吗?抱歉,如果这看起来不太好。我对javascript相当陌生,虽然异步函数背后的概念很容易理解,但在熟悉执行之前,我需要更多的练习。