Puppeteer: Headless ne peut pas lire la base de données indexée écrite à partir de Headful et vice versa

CrĂ©Ă© le 3 nov. 2017  Â·  3Commentaires  Â·  Source: puppeteer/puppeteer

Je ne sais pas si j'utilise complÚtement indexedDB, veuillez me corriger si nécessaire.


Exemple de code :

'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);
        };
    };
  });
}



Sortir:

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


bug chromium

Commentaire le plus utile

En supposant que j'ai le mĂȘme problĂšme (c'est sĂ»r que ça sent bon), cela se produit Ă©galement en tĂȘte-Ă -tĂȘte si vous dĂ©finissez manuellement --user-data-dir=/tmp/someFolder/ . Cela pourrait ĂȘtre un cas diffĂ©rent, cependant. Il semble que si je mets Ă  jour indexedDB en tĂȘte-Ă -tĂȘte, ferme, puis rouvre en tĂȘte-Ă -tĂȘte, les modifications n'ont pas persistĂ© (donc tĂȘte pleine ne peut pas lire tĂȘte pleine). La mĂȘme chose se produit entre les autres permutations d'appariements : sans tĂȘte - sans tĂȘte, et sans tĂȘte - en tĂȘte, en tĂȘte - sans tĂȘte.

Cela se produit pour le marionnettiste - pas pour une utilisation réelle.

Tous les 3 commentaires

En supposant que j'ai le mĂȘme problĂšme (c'est sĂ»r que ça sent bon), cela se produit Ă©galement en tĂȘte-Ă -tĂȘte si vous dĂ©finissez manuellement --user-data-dir=/tmp/someFolder/ . Cela pourrait ĂȘtre un cas diffĂ©rent, cependant. Il semble que si je mets Ă  jour indexedDB en tĂȘte-Ă -tĂȘte, ferme, puis rouvre en tĂȘte-Ă -tĂȘte, les modifications n'ont pas persistĂ© (donc tĂȘte pleine ne peut pas lire tĂȘte pleine). La mĂȘme chose se produit entre les autres permutations d'appariements : sans tĂȘte - sans tĂȘte, et sans tĂȘte - en tĂȘte, en tĂȘte - sans tĂȘte.

Cela se produit pour le marionnettiste - pas pour une utilisation réelle.

Bonjour, cet article semble avoir été écrit il y a un an, mais je viens de rencontrer cette erreur et j'ai donc trouvé la réponse. Dans mon cas, cela s'est produit parce que j'ai essayé d'exécuter la commande à la page ' about:blank '

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

kesava picture kesava  Â·  3Commentaires

bricss picture bricss  Â·  3Commentaires

td0m picture td0m  Â·  3Commentaires

MehdiRaash picture MehdiRaash  Â·  3Commentaires

selfrefactor picture selfrefactor  Â·  3Commentaires