如何执行关联的回调后停止weblistener?

时间:2019-05-20 14:31:03

标签: javascript weblistener

我想用Java中的网络侦听器执行一个函数(在此上下文中称为回调)。当侦听器检测到良好的模式时,它将调用回调函数,并且此函数永不停止... 所有这些都是通过browser.webRequest.onBeforeRequest.addListener

完成的

具有browser.webRequest.onBeforeRequest.addListener()的weblistener检测到良好的模式,然后调用发出GET请求的关联函数。完成后,一次又一次完成GET请求

function getResponseFromSP()
{
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = function() { 
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200){
            console.log(xmlHttp.response);
            browser.webRequest.onBeforeRequest.removeListener(getResponseFromSP);
            if(!browser.webRequest.onBeforeRequest.hasListener(getResponseFromSP)){
	    		browser.webRequest.onBeforeRequest.addListener(
					getResponseFromSP,
					{urls: ["https://example.com/policy"]}
				);
   			}
   		}
        }
    xmlHttp.open("GET", "https://example.com:5000/policy", true); // true for asynchronous 
    xmlHttp.responseType = 'json';
    xmlHttp.send(null);
}

/*
Main part
*/

browser.webRequest.onBeforeRequest.addListener(
getResponseFromSP,
{urls: ["https://example.com/policy"]}
);

1 个答案:

答案 0 :(得分:0)

一种常见的解决方案是在适当的范围内创建一个变量,在要执行该函数时检查其是否为false,但在执行后将其设置为true。

var isDone = false;

// ...
if(!isDone) {
  // ... execute the function on the event being listened for here, then set
  isDone = true;
}