Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.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 Can';关闭并重新打开popup.js后,在Chrome扩展中停止自动执行setTimeout_Javascript_Html_Google Chrome_Google Chrome Extension_Settimeout - Fatal编程技术网

Javascript Can';关闭并重新打开popup.js后,在Chrome扩展中停止自动执行setTimeout

Javascript Can';关闭并重新打开popup.js后,在Chrome扩展中停止自动执行setTimeout,javascript,html,google-chrome,google-chrome-extension,settimeout,Javascript,Html,Google Chrome,Google Chrome Extension,Settimeout,我想写一个扩展,每X秒在同一个选项卡中打开一个url。我打开popup.html,填写url和延迟,然后按start。扩展插件开始每X秒更新一次页面url。当我打开popup.html时,我可以停止进程,但当我关闭它并重新打开popup时,停止按钮不会将消息发送到background.js。这是我的代码,对不起,我是这方面的新手 backgrounds.js var interval; var repeater; var start, end; var completed = false; f

我想写一个扩展,每X秒在同一个选项卡中打开一个url。我打开popup.html,填写url和延迟,然后按start。扩展插件开始每X秒更新一次页面url。当我打开popup.html时,我可以停止进程,但当我关闭它并重新打开popup时,停止按钮不会将消息发送到background.js。这是我的代码,对不起,我是这方面的新手

backgrounds.js

var interval;
var repeater;
var start, end;
var completed = false;

function changePage(newUrl) {
  chrome.tabs.query({ currentWindow: true, active: true }, function (tab) {
    console.log(tab);
    console.log(newUrl);
    chrome.tabs.update(tab.id, {
      url: newUrl,
    });
  });
}

function update_page(data) {
  let newUrl = data.url + alphanum[start];
  if (start === end) {
    completed = true;
    changePage(newUrl);
  } else {
    changePage(newUrl);
  }

  // deciding the order
  if (data.start[0] < data.end[0]) {
    start++;
  } else if (data.start[0] === data.end[0]) {
    if (data.start[1] < data.end[1]) {
      start++;
    } else {
      start--;
    }
  } else {
    start--;
  }
}

chrome.runtime.onConnect.addListener(function (port) {
  port.onMessage.addListener(function (msg) {
    console.log(msg);
    if (msg !== "stop") {
      completed = false;
      start = alphanum.findIndex((e) => e === msg.start);
      end = alphanum.findIndex((e) => e === msg.end);
      console.log(start, end);
      console.log(completed);
      console.log(msg);
      (function a() {
        if (!completed && msg !== "stop") {
          console.log(completed);
          update_page(msg);
          repeater = setTimeout(a, msg.timeout);
        } else {
          clearInterval(repeater);
        }
      })();
    } else if (msg === "stop") {
      completed = true;
      clearInterval(repeater);
    }
  });
});

var区间;
var中继器;
var开始、结束;
var completed=假;
函数更改页(新URL){
查询({currentWindow:true,active:true},函数(tab){
控制台日志(选项卡);
console.log(newUrl);
chrome.tabs.update(tab.id{
url:newUrl,
});
});
}
功能更新页面(数据){
让newUrl=data.url+alphanum[start];
如果(开始==结束){
完成=正确;
changePage(newUrl);
}否则{
changePage(newUrl);
}
//决定订单
if(data.start[0]e==msg.start);
end=alphanum.findIndex((e)=>e==msg.end);
console.log(开始、结束);
控制台日志(已完成);
控制台日志(msg);
(职能a(){
如果(!completed&&msg!=“stop”){
控制台日志(已完成);
更新页面(msg);
中继器=设置超时(a,消息超时);
}否则{
清除间隔(中继器);
}
})();
}否则如果(消息==“停止”){
完成=正确;
清除间隔(中继器);
}
});
});
popup.js

document.addEventListener("DOMContentLoaded", function () {
  document.getElementById("start").addEventListener("click", start);
  document.getElementById("stop").addEventListener("click", stop);
});

var port;
function start(event) {
  event.preventDefault();
  port = chrome.runtime.connect({
    name: "opener",
  });
  let timeout = document.getElementById("timeout").value * 1000;
  let url = document.getElementById("url").value;
  let start = document.getElementById("st").value;
  let end = document.getElementById("end").value;
  var good_url_regex = new RegExp(
    /(^|\s)((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/\S*)?)/gi
  );
  var alphanumeric_string_regex = new RegExp(/^[a-z0-9]+$/i);
  if (url && timeout && start && end) {
    if (url.match(good_url_regex)) {
      if (
        start.match(alphanumeric_string_regex) &&
        end.match(alphanumeric_string_regex)
      ) {
        if (start.length < 2 || end.length < 2) {
          alert(
            "Hibás intervallumot adtál meg. Az intervallum tagjai mindkettő 2 karakterből kell hogy álljon!"
          );
        } else {
          port.postMessage({ timeout, url, start, end });
          port.onMessage.addListener(function (msg) {
            console.log("message recieved: " + msg);
          });
        }
      } else {
        alert(
          "Helytelen intervallumot adtál meg. A Kezd és Befejez mezők mindkettő 2-2 alfanumerikus karakterből kell álljon."
        );
      }
    } else {
      alert("Helytelen weboldal. Kérlek ellenőrizd!");
    }
  } else {
    alert("Kérlek tölts ki minden mezőt!");
  }
}

function stop(event) {
  event.preventDefault();
  port.postMessage("stop");
  port.onMessage.addListener(function (msg) {
    console.log("message recieved: " + msg);
  });
}

document.addEventListener(“DOMContentLoaded”,函数(){
document.getElementById(“开始”).addEventListener(“单击”,开始);
document.getElementById(“停止”).addEventListener(“单击”,停止);
});
var端口;
功能启动(事件){
event.preventDefault();
端口=chrome.runtime.connect({
名称:“开场白”,
});
让timeout=document.getElementById(“timeout”).value*1000;
让url=document.getElementById(“url”).value;
让start=document.getElementById(“st”)值;
让end=document.getElementById(“end”).value;
var good\u url\u regex=new RegExp(
/(^ |\s)((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)(\/\s*))/gi
);
var字母数字字符串正则表达式=新正则表达式(/^[a-z0-9]+$/i);
if(url&&timeout&&start&&end){
if(url.match(good_url_regex)){
如果(
start.match(字母数字\字符串\正则表达式)&&
end.match(字母数字\字符串\正则表达式)
) {
如果(开始.length<2 | |结束.length<2){
警觉的(
“我是中间人,我是中间人,我是中间人。”
);
}否则{
postMessage({timeout,url,start,end});
port.onMessage.addListener(函数(msg){
console.log(“收到的消息:+msg”);
});
}
}否则{
警觉的(
“在中间休息时,我需要一份工作,我需要一份2-2份的工作。”
);
}
}否则{
警惕(“Helytelen weboldal.Kérlek ellenőrizd!”);
}
}否则{
警惕(“Kérlek tölts ki minden mezőt!”);
}
}
功能停止(事件){
event.preventDefault();
港口邮递信息(“停止”);
port.onMessage.addListener(函数(msg){
console.log(“收到的消息:+msg”);
});
}
我删除了一些对问题毫无意义的东西。附加信息,扩展名从aa到ZZ,您输入一个url,它在url末尾添加两个字符,并在延迟后打开。
如果我没有为这些东西使用正确的API,请帮助我找到正确的方法。我有点困在这里,不知道我做错了什么。

使用
clearTimeout
而不是
clearTimeout