0
正在爲簡單的Chrome擴展程序編寫代碼,但在清除setTimeout
的正確實例並更新正確的Chrome選項卡時遇到問題。我想爲URL請求設置定時器,如果收到響應,則應清除相應的實例。如果響應超時,定時器功能應該用dialog.html
更新相應的窗口。問題是,響應會清除最後一個定時器,定時器功能會更新當前選項卡。我嘗試了window.setTimeout
並將request.tabId
作爲參數傳遞給定時器功能,但兩者都不起作用。感謝您的幫助,setTimeout並更新Chrome擴展程序中的正確選項卡
background.js
var flag = false;
var new_url;
var timeout;
function resp_timeout(){
var dialog_url = chrome.extension.getURL("dialog.html");
chrome.tabs.update({url: dialog_url});
}
chrome.webRequest.onBeforeRequest.addListener(
function interceptRequest(request) {
if (isOn) {
original_url = request.url;
if (request && request.url) {
if(flag){
new_url = request.url;
}
else {
new_url = request.url.replace("http","https");
timeout = setTimeout(resp_timeout, 500);
}
return { redirectUrl: new_url }
}
}
}, {urls: ['http://*/*']}, ['blocking']);
chrome.webRequest.onHeadersReceived.addListener(function(details) {
if (isOn) {
clearTimeout(timeout);
return {responseHeaders:headers};
}
}, {urls: ['*://*/*']}, ['responseHeaders','blocking']);
dialog.js:
var bg = chrome.extension.getBackgroundPage();
function ok_handler(){
window.open(bg.original_url, "_self");
}
function cancel_handler(){
window.close();
}
document.addEventListener('DOMContentLoaded', function() {
document.querySelector('#ok_button').addEventListener('click', ok_handler);
document.querySelector('#cancel_button').addEventListener('click', cancel_handler);
});
謝謝。有效。 – Khan
@汗很高興它的工作,你可以請標記答案爲接受? – rsanchez