解决方案 »

  1.   

    搞回调就行了。。干嘛非要阻止其他代码执行。。要获取到正确值后再执行其他代码,你的其他代码放到回调里面js没有线程概念,可以给你sleep下而不至于搞ui假死
      

  2.   

    js单线程,用while阻塞当然直接卡死,你用回调函数就行了
    js定时器时伪异步执行,不会阻塞,而且里面是另一个作用域(即另外的函数),你在里面返回和外部函数又没关系
      

  3.   

    callback 回调不就可以了
    另外listener 本身就是回调的概念
      

  4.   


     其他代码无法放倒回调函数里面,其他代码是chrome提供的api控制的,现在的状况是使用chrome提供的api,只要函数返回,那么剩下的代码就会直接执行,我没有权利去控制其他代码什么时候执行,只能控制不让回调函数返回。
      

  5.   


     其他代码无法放倒回调函数里面,其他代码是chrome提供的api控制的,现在的状况是使用chrome提供的api,只要函数返回,那么剩下的代码就会直接执行,我没有权利去控制其他代码什么时候执行,只能控制不让回调函数返回。chrome提供的api大部分都提供回调,自己认真看api,想好代码的执行循序。。
      

  6.   


     其他代码无法放倒回调函数里面,其他代码是chrome提供的api控制的,现在的状况是使用chrome提供的api,只要函数返回,那么剩下的代码就会直接执行,我没有权利去控制其他代码什么时候执行,只能控制不让回调函数返回。chrome提供的api大部分都提供回调,自己认真看api,想好代码的执行循序。。代码如下:
    我现在是要开发一个chrome插件,在chrome发送http请求之前,修改http 头部,只有点击了forward按钮之后才让chrome发送出去修改后的头部。现在使用的chrome提供的API如下,只有用这个API才能在发送http之前修改头部信息:
    chrome.webRequest.onBeforeSendHeaders.addListener(function(details){
            //修改http 头部信息
            if(forward){
                   return;
           }else {
                blocking;
           }
        }, filter, ["blocking", "requestHeaders"]);我现在的难点是没办法blocking住。只要function(details)返回了,那么chrome会自动把http发送出去的。
      

  7.   

    onBeforeRequest(可以为同步)
    当请求即将发出时产生。这一事件在 TCP 连接建立前发送,可以用来取消或重定向请求。这里至少可以弹出一个对话框 来决定是不是 cancel
      

  8.   


    chrome.webRequest.onBeforeSendHeaders.addListener(function(details){
            //修改http 头部信息
            if(forward){
                   return;
           }else{
     fuction(){ doSomething().}
    }
        }, filter, ["blocking", "requestHeaders"]);
    在doSomething()里面处理不行吗?
      

  9.   


    是弹出对话框啊,但是我不会那种alert的对话框啊,我试了模态对话框时不行的,虽然弹出来了,鼠标也不能点,但是后天还是不断地运行,也就是request还是发送出去了
      

  10.   


    do_something()如何阻塞住呢?这个不是说我事先知道应该修改什么在do_something中完成返回就可以了,只要用户不forward就一直阻塞住,就想弹出alert或者confirm对话框那样
      

  11.   


    你说的onBeforeRequest是在我的那个事件之前发生的,如果你在这一步取消了请求,那么就到不了我的那个事件了。
      

  12.   


    var execFn = function(){
    console.log("come on!执行我!");
    }
    var queue = [];
    queue.exec = function(){
    if(this.length){
    this[0]();
    }
    }
    chrome.webRequest.onBeforeSendHeaders.addListener(function(details){
    queue.push(execFn);
    //修改http 头部信息
    if(forward){
    queue.exec();
    return;
    }else {
    queue.push(execFn);
    // blocking;
    }
    }, filter, ["blocking", "requestHeaders"]);$btn.addListener("click",function(){
    queue.exec();
    });
      

  13.   


    var execFn = function(){
        console.log("come on!执行我!");
    }
    var queue = [];
    queue.exec = function(){
        if(this.length){
            this[0]();
        }
    }
    chrome.webRequest.onBeforeSendHeaders.addListener(function(details){
        queue.push(execFn);
        //修改http 头部信息
        if(forward){
            queue.exec();
            return;
        }else {
            // blocking;
        }
    }, filter, ["blocking", "requestHeaders"]);
     
    $btn.addListener("click",function(){
        queue.exec();
    });