Puppeteer: Headless can't read indexedDB written from Headful and vice versa

Created on 3 Nov 2017  路  3Comments  路  Source: puppeteer/puppeteer

I am not sure if I use indexedDB completely properly, please, correct me if needed.


Code example:

'use strict';

const puppeteer = require('puppeteer');

(async function main() {
  try {
    let browser = await puppeteer.launch({
      headless: false,
      userDataDir: 'test-profile-dir',
    });
    let page = await browser.newPage();
    await page.goto('https://example.org/');
    await page.evaluate(setIDB, 'headfulIDB', 'foo');
    await page.close();
    await browser.close();

    browser = await puppeteer.launch({
      headless: true,
      userDataDir: 'test-profile-dir',
    });
    page = await browser.newPage();
    await page.goto('https://example.org/');
    await page.evaluate(setIDB, 'headlessIDB', 'bar');
    await page.close();
    await browser.close();

    browser = await puppeteer.launch({
      headless: false,
      userDataDir: 'test-profile-dir',
    });
    page = await browser.newPage();
    await page.goto('https://example.org/');
    console.log('Headful mode.');
    console.log('Headful IDB: ', await page.evaluate(getIDB, 'headfulIDB'));
    console.log('Headless IDB: ', await page.evaluate(getIDB, 'headlessIDB'));
    await page.close();
    await browser.close();

    browser = await puppeteer.launch({
      headless: true,
      userDataDir: 'test-profile-dir',
    });
    page = await browser.newPage();
    await page.goto('https://example.org/');
    console.log('Headless mode.');
    console.log('Headful IDB: ', await page.evaluate(getIDB, 'headfulIDB'));
    console.log('Headless IDB: ', await page.evaluate(getIDB, 'headlessIDB'));
    await page.close();
    await browser.close();
  } catch (err) {
    console.error(err);
  }
})();


function setIDB(key, value) {
  return new Promise((resolve, reject) => {
    const openRequest = indexedDB.open('testIDB', 1);

    openRequest.onerror = (err) => { reject(err.target.error); };
    openRequest.onupgradeneeded = (event) => { event.target.result.createObjectStore('test'); };

    openRequest.onsuccess = (event) => {
      const db = event.target.result;

      db.onerror = (err) => { db.close(); reject(err.target.error); };

      db.transaction('test', 'readwrite')
        .objectStore('test')
        .put(value, key)
        .onsuccess = () => { db.close(); resolve(); };
    };
  });
}

function getIDB(key) {
  return new Promise((resolve, reject) => {
    const openRequest = indexedDB.open('testIDB', 1);

    openRequest.onerror = (err) => { reject(err.target.error); };
    openRequest.onupgradeneeded = (event) => { event.target.result.createObjectStore('test'); };

    openRequest.onsuccess = (event) => {
      const db = event.target.result;

      db.onerror = (err) => { db.close(); reject(err.target.error); };

      db.transaction('test', 'readonly')
        .objectStore('test')
        .get(key)
        .onsuccess = (eventGet) => {
          const { result } = eventGet.target;
          db.close();
          resolve(result);
        };
    };
  });
}



Output:

Headful mode.
Headful IDB:  foo
Headless IDB:  undefined
Headless mode.
Headful IDB:  undefined
Headless IDB:  bar


bug chromium

Most helpful comment

Assuming I have this same issue (sure smells like it), this also occurs in headfull if you manually set --user-data-dir=/tmp/someFolder/. This might be a different case, though. It appears that if I update indexedDB while in headfull, close, then reopen in headfull, the changes did not persist (so headfull can't read headfull). Same thing happens between the other permutations of pairings: headless - headless, and headless - headful, headful - headless.

This happens for puppeteer -- not for actual usage.

All 3 comments

Assuming I have this same issue (sure smells like it), this also occurs in headfull if you manually set --user-data-dir=/tmp/someFolder/. This might be a different case, though. It appears that if I update indexedDB while in headfull, close, then reopen in headfull, the changes did not persist (so headfull can't read headfull). Same thing happens between the other permutations of pairings: headless - headless, and headless - headful, headful - headless.

This happens for puppeteer -- not for actual usage.

Hi, this article seems to have been written a year ago, but I've just experienced this error, and as a result I found the answer. In my case, it happened because I tried to execute the command on page 'about:blank'

Was this page helpful?
0 / 5 - 0 ratings