Google chrome extension 使用上次之前的值设置间隔?

Google chrome extension 使用上次之前的值设置间隔?,google-chrome-extension,message,local-storage,setinterval,Google Chrome Extension,Message,Local Storage,Setinterval,我正在开发一个Google Chrome扩展,我有一个相当。。奇怪的问题。(我会尽量让这件事尽可能简单) 基本上,我允许用户自定义setInterval循环的间隔速度。 我使用一个输入框来实现这一点,当输入数据时,该输入框在keyUp上设置一个localStorage值。然后,通过Chrome的消息传递API将localStorage值传递给内容脚本,然后setInterval循环自动拾取该值 options.html background.html messagePassing.js

我正在开发一个Google Chrome扩展,我有一个相当。。奇怪的问题。(我会尽量让这件事尽可能简单)

基本上,我允许用户自定义
setInterval
循环的间隔速度。 我使用一个输入框来实现这一点,当输入数据时,该输入框在
keyUp
上设置一个
localStorage
值。然后,通过Chrome的消息传递API将
localStorage
值传递给内容脚本,然后
setInterval
循环自动拾取该值

options.html


background.html


messagePassing.js

if(localStorage[“scanTime”]==未定义| | localStorage[“scanTime”]==”){
本地存储[“扫描时间”]=2000;
}
chrome.extension.onRequest.addListener(
功能(请求、发送方、发送响应){
if(request.method==“getScanTime”){
sendResponse({data:localStorage[“scanTime”]});
log(“扫描时间LS,响应:+localStorage[“扫描时间”]);
}
}
);
options.js

函数setPref_customTime(){
var inputBoxElement=document.getElementById(“customTime_输入”);
localStorage[“scanTime”]=InputBoxeElement.value;
log(“scanTime LS,setPref_customTime():”+localStorage[“scanTime”]);
}
content.js

window.load=passMessages();
函数passMessages(){
sendRequest({method:“getScanTime”},函数(响应){
localStorage[“扫描时间”]=response.data;
log(“扫描时间LS,请求:+localStorage[“扫描时间”]);
});
扫描页();
}
函数scanPage(){
log(“扫描时间LS,扫描页面:+localStorage[“扫描时间”]);
setInterval(函数匹配(){
log(“扫描时间LS,匹配:+localStorage[“扫描时间”]);
},本地存储[“扫描时间]);
}
并且控制台在输入自定义值后返回这些日志(加载默认值时,它会像应该的那样为所有日志返回“2000”):

它清楚地表明,
setInterval
正在使用新值,但是页面和日志以旧值的速度刷新(这不是用户错误。我多次使用了非常不同的值,得到了相同的结果)。具有相同名称的
localStorage
如何在几行之间具有不同的值


更新:我刚刚注意到控制台报告了除“scanTime LS,response:”之外的所有
console.log()
命令。这很重要吗?

您看到的问题是,一个循环以2000毫秒的速度运行,然后以5000毫秒的速度启动一个新的循环,留下两个循环同时运行。使用启动第二个时,需要取消第一个

这样的办法应该行得通

function scanPage(){
    console.log("scanTime LS, scanPage: " + localStorage["scanTime"]);

    if (localStorage["intervalID"]) {
      clearInterval(localStorage["intervalID"]);
    }

    localStorage["intervalID"] = setInterval(function match(){
        console.log("scanTime LS, match: " + localStorage["scanTime"]);
    }, localStorage["scanTime"]);
}

是的,我觉得有多个日志被报告是很奇怪的。我现在就试试,然后再打给你。:)不。插入您的代码后,仍然具有完全相同的效果:/您可能需要将intervalID转换回int。我不明白。。请您解释清楚一点,或者编辑您的代码,好吗?setInterval返回一个整数
5
localStorage[“intervalID”]
返回一个字符串
“5”
<代码>清除间隔只能与整数一起工作<代码>清除间隔(parseInt(localStorage[“intervalID”])
function scanPage(){
    console.log("scanTime LS, scanPage: " + localStorage["scanTime"]);

    if (localStorage["intervalID"]) {
      clearInterval(localStorage["intervalID"]);
    }

    localStorage["intervalID"] = setInterval(function match(){
        console.log("scanTime LS, match: " + localStorage["scanTime"]);
    }, localStorage["scanTime"]);
}