0

Je développe une webextension et je suis coincé avec le problème suivant.Comment empêcher browser_action de recharger sa fenêtre contextuelle à chaque fois?

J'ai browser_action qui affiche une fenêtre contextuelle avec du contenu. Le problème est, il prend 3-4 secondes pour charger, et l'utilisateur doit attendre chaque fois qu'il ouvre cette action du navigateur.

Je veux en quelque sorte forcer browser_action à charger DOM de la fenêtre pop-up juste une fois, donc quand j'ouvre à nouveau cette action il me montre déjà rendu la fenêtre.

Je ne peux pas précharger des actifs via un script d'arrière-plan, car l'actif est du site Web distant et vous ne pouvez pas facilement stocker le DOM rendu dans localStorage pour l'afficher plus tard à la demande de l'utilisateur.

J'ai pensé mettre en arrière-plan et l'afficher en quelque sorte dans la fenêtre contextuelle browser_action, mais je n'ai pas réussi à trouver comment faire cela.

La page d'arrière-plan est chargée une fois et reste indéfiniment pendant que l'extension est activée, donc peut-être que je pourrais afficher le contenu à l'intérieur de la fenêtre contextuelle browser_action d'une façon ou d'une autre?

+0

Si vous n'avez pas besoin d'interaction (js), vous pouvez stocker tout le code HTML et tous les CSS en texte brut, puis écrivez-les simplement dans iframe. – wOxxOm

+0

"Le problème est, il faut 3-4 secondes pour charger" - cela ressemble à votre problème réel. optimiser la page, pas le popup? – the8472

+0

J'ai déjà dit en question c'est le site distant (WhatsApp Web pour être clair). Je ne peux pas optimiser cela. – stil

Répondre

2

Malheureusement, je ne pense pas que ce soit impossible. Votre meilleur pari serait de montrer une interface utilisateur utile pendant que les charges iframe.

Il n'est certainement pas possible de rendre la page contextuelle elle-même persistante.

Et je suis 98% positif, vous ne pouvez pas échanger dans un onglet/cadre chargé dans la page de la popup. Chrome le fait parfois en interne (préchargez puis échangez, voir tabs.onReplaced), mais vous avez peu de contrôle sur ce mécanisme.

Il semble que vous pouvez déclencher avec preload links:

<link rel="preload" href="https://example.com/" 
     as="document" crossorigin="anonymous"> 

Cependant, il sert à rien d'incorporer cela dans la page popup (il sera récupéré lors du chargement de pop-up, ce qui est millisecondes de différence) et Je suis raisonnablement sûr que le préchargement de, disons, la page d'arrière-plan ne sera pas reporté sur le popup, malgré le fait qu'ils partagent normalement le processus du navigateur. Vous pouvez expérimenter si!

+0

Il semble que Mozilla a signalé ce problème comme WONTFIX: https://bugzilla.mozilla.org/show_bug.cgi?id=1383979 Dommage. – stil