web-dev-qa-db-fra.com

Comment démarrer "Chrome" (ou équivalent) en tant que thread au lieu de processus?

Nous avons une application, qui est écrite en Qt/C++. Son interface graphique est en Html/Css/JS.

L'application fonctionne bien sur Chrome & Edge. Sur les ordinateurs de bureau, l'application appelle le navigateur du système d'exploitation comme un processus distinct. Le navigateur se connecte via Websocket à l'application et échange les messages à des fins d'affichage. Cela fonctionne bien.

Cependant, cela ne fonctionne pas dans les mobiles. Parce que l'invocation d'un navigateur en tant que processus séparé, enverrait l'application réelle en arrière-plan dans Android & iOS.
Maintenant, de nombreuses réponses sur SO suggère d'utiliser la vue Web pour mobile, qui est intégrée. Mais la vue Web dans Android ne le fait pas répondent à toutes les exigences de tous les appareils et la Webview iOS est tout simplement inférieure et faible.

Question: Existe-t-il un moyen de démarrer un navigateur de type chrome en tant que thread de l'application elle-même?

L'intention est de garder l'application au premier plan sans compromettre les limitations de Webview. Très bien avec l'intégration et la compilation du code source, si nécessaire.

9
iammilind

Les moteurs Web sont les organes moteurs du fonctionnement d'un navigateur. Comme chrome est basé sur le moteur Web chrome, vous devez modifier le moteur en conséquence.

Chrome utilise un processus pour chaque onglet tandis que Firefox utilise un fil à la place.

L'architecture Chrome a deux processus principaux Processus du navigateur et Processus de rend. L'interface utilisateur du navigateur est en cours d'exécution dans le processus du navigateur et lorsque vous ouvrez un nouvel onglet dans Chrome, pour chaque onglet, un nouveau processus est créé appelé Processus de rend. Poignées du processus de rendu) rendu de votre contenu HTML.

Supposons que vous ayez ouvert 10 onglets dans votre chrome qui conduit à la création de 10 processus de rendu et 1 processus de navigateur.

Pourquoi séparer le processus de rendu pour chaque onglet?

Supposons qu'à tout moment pendant la navigation sur Internet pour une raison quelconque, un onglet se bloque, alors seul ce processus de rendu est tué et d'autres processus sont toujours en vie. Vos 9 onglets sont toujours réactifs et fonctionnent. Comme l'interface utilisateur du navigateur s'exécute dans un processus différent. L'interface utilisateur du navigateur ne sera pas pendue en général et est suffisamment réactive. Comme chaque moteur de rendu s'exécute en tant que processus différent, l'accès aux données partagées est difficile (le thread peut accéder aux données partagées), ce qui assure la sécurité des données entre les onglets. Il existe de nombreux autres processus en cours d'exécution et ayant leur propre objectif.

1
Nikhil Ghule

Jetez un œil à Onglets personnalisés Chrome . Cette approche se situe entre une WebView et l'ouverture d'un lien en externe dans Chrome.

Pour autant que je sache, tout se passe dans le processus du navigateur, mais vous pouvez le réchauffer via un service spécial. Vous pouvez également pré-rendre le contenu via mayLaunchUrl .

0
Mister Smith