Search code examples
javascriptgoogle-chromegoogle-chrome-extensionxmlhttprequest

How do I send an HTTP request from a Chrome extension?


I'm working on a chrome extension that sends a HTTP request.

How do I send it to www.example.com with the parameter par with value 0?

https://www.example.com?par=0

(the server reads the parameter par and does something)

I found this article, talking about Cross-Origin XMLHttpRequest, but I don't know how their example could help me.


Solution

  • First, you'll need to edit your manifest.json and add the permission for www.example.com:

    • For the new Manifest V3, use the host_permissions field:

      {
          "manifest_version": 3,
          ...
          "host_permissions": [
              "https://www.example.com/*"
          ],
          ...
      }
      
    • If you are still using the old Manifest V2, use the permissions field:

      {
          "manifest_version": 2,
          ...
          "permissions": [
              "https://www.example.com/*"
          ],
          ...
      }
      

    Then in your background page (or somewhere else) you can do:

    fetch('http://www.example.com?par=0').then(r => r.text()).then(result => {
        // Result now contains the response text, do what you want...
    })
    

    See also MDN doc for fetch().


    Deprecated version using XMLHttpRequest (ES5):

    function callback() {
        if (xhr.readyState === XMLHttpRequest.DONE) {
            if (xhr.status === 200) {
                result = xhr.responseText;
                // ...
            }
        }
    };
    
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "http://www.example.com?par=0", true);
    xhr.onreadystatechange = callback;
    xhr.send();
    

    NOTE the warning at the top of the relative documentation page:

    In Manifest V3, XMLHttpRequest is not supported in background pages (provided by Service Workers). Please consider using its modern replacement, fetch()