问题描述
我想编写一个扩展名,该扩展名每隔X秒在同一选项卡中打开一个URL。我打开popup.html,填写网址,延迟,然后按开始。扩展名开始每X秒更新页面URL。当我保留popup.html时,我可以停止该过程,但是当我关闭它并重新打开弹出窗口时,停止按钮不会将消息发送到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);
}
});
});
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);
});
}
我删除了一些对这个问题没有意义的内容。附加信息,扩展名从aa到ZZ,您输入一个URL,它将两个字符添加到URL的末尾,并在延迟后将其打开。 如果我没有为这些东西使用正确的API,请帮助我找到正确的方法。我有点卡在这里,不知道我在做什么错。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)