October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsClean PCRecommendedOne scan can reveal what keeps slowing WindowsLook for cleanup and repair opportunities.Run ScanOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
Menlo Park desk6 min

Hooking URL.createObjectURL to Save Instagram Voice Notes as They Play in Chrome

A walkthrough of the reported technique for catching Instagram voice-note audio blobs in Chrome: a MAIN-world createObjectURL hook, an isolated-world relay, and a background download.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A Chrome extension can catch an Instagram voice note while it plays by wrapping URL.createObjectURL in the page’s own JavaScript world. The wrapper spots audio Blobs as the page creates them. An isolated-world content script then receives their metadata, and the extension’s background worker handles the download. This is one developer’s reported technique, not an official or guaranteed Instagram interface. It depends on how Instagram’s web client currently feeds audio to an <audio> element, and that can change without notice.

Below: why the hook works, how the two JavaScript worlds are bridged, how to filter candidates, how to tie a blob to a chat bubble, and how the save step works. Use it only for voice notes you are entitled to keep, and don’t republish someone else’s recording without their consent.

As an Amazon Associate I earn from qualifying purchases.

Why URL.createObjectURL is the observation point

According to the extension author’s account, Instagram doesn’t point the audio element at a plain, fetchable file URL. It builds a Blob, calls URL.createObjectURL(blob), and assigns the resulting blob: URL to an <audio> element. If that is accurate for the page you’re on, every playable voice note passes through that one function, and wrapping it lets you see the Blob at the moment it exists.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Treat this as an observation about one implementation at one point in time. Instagram can change how it delivers audio, and a hook like this is the first thing to break when it does.

#1 Best Overall
Samsung 14" Galaxy Chromebook Go Laptop PC Computer, Intel Celeron N4500 Processor, 4GB RAM, 64GB Storage, ChromeOS, XE340XDA-KA2US, Student Laptop, Silver
  • SLIM. LIGHTWEIGHT. READY TO GO: The all-new slim design is perfect for busy lives on the go.
  • SKILLFULLY DESIGNED. MILITARY TOUGH: Built with premium craftsmanship to withstand the occasional drop or ding.
  • ALL-DAY, ALL-IN-ONE CHARGING: Power through your school day – and beyond – with a long-lasting 12-hour battery.¹
  • 3X FASTER THAN THE PREVIOUS GENERATION OF WIFI: Crush your schoolwork in record time with Wi-Fi that’s three times faster than the previous generation of Wi-Fi.
  • YOUR PHONE AND CHROMEBOOK WORK BETTER TOGETHER: Easily transfer files between devices, and control your phone right from your Chromebook.

The core problem: two JavaScript worlds

Chrome runs content scripts in an isolated world. They share the page’s DOM but not its JavaScript objects, so patching URL.createObjectURL from an ordinary content script changes only your own copy. Content scripts also have limited access to extension APIs; Chrome’s content-script documentation says they communicate with the rest of the extension through messaging.

The described architecture therefore has three parts:

  • MAIN-world script: runs inside the page’s context, patches URL.createObjectURL, and reports candidate blobs.
  • Isolated-world content script: listens for those reports and relays them through extension messaging. It can also draw the save button.
  • Background service worker: receives the data and calls the Chrome downloads API.

Step 1: Inject the hook early in the MAIN world

The patch must be in place before Instagram’s code first calls the function, so it needs to run at document_start. Chrome supports declaring a content script with "world": "MAIN" in a Manifest V3 manifest (or registering it through the scripting API). Check the current Chrome extension documentation for the exact minimum Chrome version and manifest fields before relying on this.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
HP Chromebook 14 Laptop, Intel Celeron N4120, 4 GB RAM, 64 GB eMMC, 14" HD Display, Chrome OS, Thin Design, 4K Graphics, Long Battery Life, Ash Gray Keyboard (14a-na0226nr, 2022, Mineral Silver)
  • FOR HOME, WORK, & SCHOOL – With an Intel processor, 14-inch display, custom-tuned stereo speakers, and long battery life, this Chromebook laptop lets you knock out any assignment or binge-watch your favorite shows..Voltage:5.0 volts
  • HD DISPLAY, PORTABLE DESIGN – See every bit of detail on this micro-edge, anti-glare, 14-inch HD (1366 x 768) display (1); easily take this thin and lightweight laptop PC from room to room, on trips, or in a backpack.
  • ALL-DAY PERFORMANCE – Reliably tackle all your assignments at once with the quad-core, Intel Celeron N4120—the perfect processor for performance, power consumption, and value (2).
  • 4K READY – Smoothly stream 4K content and play your favorite next-gen games with Intel UHD Graphics 600 (3) (4).
  • MEMORY AND STORAGE – Enjoy a boost to your system’s performance with 4 GB of RAM while saving more of your favorite memories with 64 GB of reliable flash-based eMMC storage (5).
{
  "manifest_version": 3,
  "content_scripts": [
    {
      "matches": ["https://www.instagram.com/*"],
      "js": ["hook-main.js"],
      "run_at": "document_start",
      "world": "MAIN"
    },
    {
      "matches": ["https://www.instagram.com/*"],
      "js": ["relay.js"],
      "run_at": "document_start"
    }
  ],
  "permissions": ["downloads"]
}

Inside hook-main.js, keep the native function, call it unchanged so the page behaves normally, and only then inspect the result. The sketch below is illustrative, not the author’s code:

(() => {
  const nativeCreate = URL.createObjectURL.bind(URL);

  URL.createObjectURL = function (obj) {
    const url = nativeCreate(obj);
    try {
      if (obj instanceof Blob && looksLikeVoiceNote(obj)) {
        document.dispatchEvent(new CustomEvent('vn-blob-seen', {
          detail: { url, type: obj.type, size: obj.size, t: Date.now() }
        }));
      }
    } catch (e) { /* never break the page */ }
    return url;
  };
})();

Two rules matter here: always return the native result, and wrap your own logic in try/catch so a bug in the extension can never stop the page’s audio from playing.

Step 2: Filter candidates

Instagram creates many blobs for many reasons, including video segments, so an unfiltered hook would flag everything. The author reports filtering on MIME type and size, with a minimum of 2,048 bytes and a maximum of 52,428,800 bytes (the article calls this 50 MB; in binary units it is 50 MiB). These are the author’s configuration values. They aren’t published standards or verified Instagram limits, so tune them against what you actually observe.

The author also says an earlier approach that hashed blob contents made a busy Reels page hang. That is an anecdote, not a benchmark, but it supports a general rule: keep work inside the hook cheap, and defer anything heavy until the user acts.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Reading duration without leaking memory

To show a length next to the save button, the author creates a temporary, hidden Audio element, requests metadata, reads duration, then removes the source and calls load() to release the resource. Do the same cleanup whichever way you read metadata, or inspected blobs will linger.

function readDuration(url) {
  return new Promise((resolve) => {
    const a = new Audio();
    a.preload = 'metadata';
    const done = (d) => { a.removeAttribute('src'); a.load(); resolve(d); };
    a.onloadedmetadata = () => done(a.duration);
    a.onerror = () => done(null);
    a.src = url;
  });
}

Step 3: Bridge MAIN to the extension

The author uses CustomEvents dispatched on document as the channel between the MAIN-world and isolated-world scripts, which works because both share the DOM. The relay then forwards to the extension:

Rank #4
HP 14" HD Chromebook Laptop for Students, Intel Quad-Core N4120(> N4020), 4GB RAM, 64GB eMMC, WiFi, Webcam, HDMI, USB-A&C, 14 Hours Battery Life, Zoom, Chrome OS, CUE Accessories
  • Intel Celeron N4120: 4 Cores & Threads, 1.1GHz Base Clock, Up to 2.6GHz Boost Clock, 4MB Cache, Intel UHD Graphics 600. The perfect combination of performance, power consumption, and value helps your device handle multitasking smoothly and reliably with four processing cores to divide up the work.
// relay.js (isolated world)
document.addEventListener('vn-blob-seen', (e) => {
  chrome.runtime.sendMessage({ kind: 'blob-seen', ...e.detail });
});

Keep event payloads to plain, serializable metadata. Remember that any script on the page can also listen for or fire these events, so the bridge shouldn’t carry anything sensitive and the background worker should validate every message.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Step 4: Pair a blob with the right chat bubble

A captured blob URL alone gives the user nothing to click. The author attaches captured blobs to visible voice-message bubbles using a MutationObserver, matching by arrival order and timing: a bubble appears or starts playing, and the blob that was just created is assigned to it. This is a heuristic. The author notes the page DOM can be re-rendered, which can discard injected buttons, so the observer has to re-check and re-attach rather than assume a one-time insertion. Expect occasional mismatches if several notes load close together.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Step 5: Save

Blob URLs are tied to the page that created them, so the bytes have to be read from inside the page. As the author describes it:

  1. On a save click, the MAIN-world script runs fetch(blobUrl) and gets the Blob.
  2. It converts the Blob to a data URL with FileReader.
  3. The data is passed through the relay to the background service worker.
  4. The service worker calls chrome.downloads.download with a filename.
// background.js
chrome.runtime.onMessage.addListener((msg) => {
  if (msg.kind === 'save') {
    chrome.downloads.download({
      url: msg.dataUrl,
      filename: 'voice-note-' + Date.now() + '.m4a'
    });
  }
});

Choose the file extension from the Blob’s actual MIME type instead of hard-coding it, since the container format is something you should read from the captured data, not assume. Data URLs are bulky for large inputs, which is another reason a size ceiling is sensible. The author’s extension also adds a side panel and a daily free quota; those are product choices of that extension, not part of the technique.

Build it or install one?

The Chrome Web Store lists third-party extensions that advertise saving voice messages. These are vendor listings, and their privacy and feature statements haven’t been independently audited here. Compare the options on these points:

Factor Build your own hook Install a listed extension
Control over code and data Full; nothing leaves your machine unless you send it Depends on the vendor; read the listed permissions and privacy statement
Effort You write and test the MAIN/isolated bridge and the UI Install and use
Maintenance when Instagram changes Yours to fix Vendor’s; updates may lag
Availability Unpacked or self-published Listings can be changed or removed at any time

Limits and cautions

  • Fragility: the approach rests on one reported implementation detail. If Instagram switches to another delivery mechanism, the hook sees nothing.
  • Only what you can already play: the hook observes audio your own logged-in session loads. It does not give access to messages you can’t open, and shouldn’t be described as bypassing access restrictions.
  • Consent and terms: save recordings for personal, authorized use, get the sender’s permission before sharing, and check Instagram’s terms and the law where you live. This article makes no legal claims.
  • Safe patching: other extensions or page scripts may wrap the same function. Always call through to the native version and never throw from your wrapper.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Leave a Reply

Your email address will not be published. Required fields are marked *

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Windows Errors? Fix Them Before They SpreadFree repair scan
Crashes, No Sound, or Screen Glitches?Free driver scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.