Chrome Extension 获得RequstBody

在Chrome Extension的Developer Guide里并没有写到怎么获取一个请求的ResponseBody,折腾了一番利用chrome.debugger终于实现,代码实现如下


var currentTab_id=null

chrome.tabs.onActivated.addListener(function(tabId, changeInfo, tab) {
  //得到当前标签
chrome.tabs.query(
    {
        currentWindow: true,
        active: true
    },
    function(tabArray) {
        var currentTab = tabArray[0];
        if(currentTab.url)
        if(currentTab_id==currentTab.id)
        {
          return
        }else{
          Attach(currentTab.id)
        }
    }
  )

//将当前页面Attach到调试器
  function Attach(id)
  {
    chrome.debugger.attach({ 
      tabId: id
    }, "1.3", onAttach.bind(null, id));
    
  }
//Attach成功后,开启网络并禁止缓存
  function onAttach(tabId) {
    currentTab_id=tabId
    chrome.debugger.sendCommand({ //first enable the Network
        tabId: tabId
    }, "Network.enable",function(){
      
      chrome.debugger.sendCommand(
        { tabId: tabId}, 
        "Network.setCacheDisabled",{cacheDisabled:true},
        function(){
          console.log("cache disabled!")
        }
      )
      
      
    });
    console.log("debugger atached")
    chrome.debugger.onEvent.addListener(allEventHandler);

    };
  
  //接受Debugger的Events
  function allEventHandler(debuggeeId, message, params){
  
    // console.log(params)
    if (currentTab_id != debuggeeId.tabId) {
        return;
    }
  
    if (message == "Network.responseReceived") {
        console.log("responseReceived")
        chrome.debugger.sendCommand({
            tabId: debuggeeId.tabId
        }, "Network.getResponseBody", {
            "requestId": params.requestId
        }, function(response) {
            //response就是接受到的ResponseBody,可以通过RequstId来判断是哪个Request的Response
        });
    }
  
  }
  
}); 

manifest.json


    
    "permissions": [
      "debugger"
    ]
    
    
  

 

你可能感兴趣的:(chrome,extension,chrome)