chrome.webRequest not working?

google-chrome, google-chrome-extension, javascript

Solution

Well for an example of usage I can give you this working code. I wrote it this way because the other way seems backwards to me but that is just my personal preference, they should both work the same.

Manifest

{
  "name": "Chrome webrequest test",
  "version": "0.1",
  "description": "A test for webrequest",
  "manifest_version": 2,
  "permissions": [
    "<all_urls>","webRequest","webRequestBlocking"
  ],
  "background": {
    "scripts": ["bgp.js"],
    "persistent": true
  }
}

bgp.js

chrome.webRequest.onBeforeSendHeaders.addListener(function(details){
  //console.log(JSON.stringify(details));
  var headers = details.requestHeaders,
  blockingResponse = {};

  // Each header parameter is stored in an array. Since Chrome
  // makes no guarantee about the contents/order of this array,
  // you'll have to iterate through it to find for the
  // 'User-Agent' element
  for( var i = 0, l = headers.length; i < l; ++i ) {
    if( headers[i].name == 'User-Agent' ) {
      headers[i].value = '>>> Your new user agent string here <<<';
      console.log(headers[i].value);
      break;
    }
    // If you want to modify other headers, this is the place to
    // do it. Either remove the 'break;' statement and add in more
    // conditionals or use a 'switch' statement on 'headers[i].name'
  }

  blockingResponse.requestHeaders = headers;
  return blockingResponse;
},
{urls: [ "<all_urls>" ]},['requestHeaders','blocking']);

Problem

I'm trying to implement the chrome.webRequest API in my extension but for some reason it's just not working no matter what I do. Can someone post an example of usage? or correct my mistakes? Basically what I'm trying to do is to intercept the recieved headers from a response. This is an implementation for onBeforeSendHeaders but I'd like to use OnHeadersRecieved as well : ``` var requestFilter = { urls: [ "<all_urls>" ] }, // The 'extraInfoSpec' parameter modifies how Chrome calls your // listener function. 'requestHeaders' ensures that the 'details' // object has a key called 'requestHeaders' containing the headers, // and 'blocking' ensures that the object your function returns is // used to overwrite the headers extraInfoSpec = ['requestHeaders','blocking'], // Chrome will call your listener function in response to every // HTTP request handler = function( details ) { alert(details); var headers = details.requestHeaders, blockingResponse = {}; // Each header parameter is stored in an array. Since Chrome // makes no guarantee about the contents/order of this array, // you'll have to iterate through it to find for the // 'User-Agent' element for( var i = 0, l = headers.length; i < l; ++i ) { if( headers[i].name == 'User-Agent' ) { headers[i].value = '>>> Your new user agent string here <<<'; break; } // If you want to modify other headers, this is the place to // do it. Either remove the 'break;' statement and add in more // conditionals or use a 'switch' statement on 'headers[i].name' } blockingResponse.requestHeaders = headers; return blockingResponse; }; chrome.webRequest.onBeforeSendHeaders.addListener( handler, requestFilter, extraInfoSpec ); ``` this is my manifest file: ``` { "background_page": "iRBackground.html", "browser_action": { "default_icon": "Off.png", "popup": "iRMenu.html" }, "content_scripts": [ { "js": [ "Content.js" ], "matches": [ "http://*/*" ], "run_at": "document_start" } ], "description": "***", "icons": { "128": "On128x128.png", "16": "On.png", "48": "On48x48.png" }, "key": "****", "manifest_version": 2, "name": "***", "permissions": [ "tabs", "notifications", "unlimitedStorage", "webRequest", “webRequestBlocking”, “<all_urls>”], "update_url": "***/Chrome/UpdateVersion.xml", "version": "1.3" } ``` the error I get from Chrome is: `Uncaught TypeError: Cannot read property 'onBeforeSendHeaders' of undefined` Anyone see anything wrong??? thanks

Original source