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
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'
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.