[Bug]: Plugin call after navigation can be answered before reply proxy is updated

Ouverte Adaptée aux débutants
#8,616 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
84/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
android, java
Domaine
mobile-dev

Piste de recherche

Commencez dans MessageHandler.java et examinez l’ordre de mise à jour du proxy de réponse et de publication du message pendant la navigation ou le rechargement. Reproduisez le problème avec une lecture rapide de Preferences sur Android, puis vérifiez que les appels de plugin depuis la nouvelle page utilisent le proxy mis à jour et sont résolus, au lieu d’être silencieusement ignorés.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

triage
Capacitor Version

@capacitor/cli: 8.4.0
@capacitor/core: 8.4.0
@capacitor/android: 8.4.0

Other API Details
npm: 11.0.0
node: 22.13.0
Platforms Affected
  • iOS
  • Android
  • Web
Current Behavior

After a reload or navigation, a fast plugin call (e.g. a Preferences read, which is how the bug appeared for us) can potentially never resolve as it uses the previous proxy instead of the updated one. The cause are these lines in MessageHandler.java:

if (isMainFrame) {
    postMessage(message.getData());
    javaScriptReplyProxy = replyProxy;
}

In case of a fast plugin call, sendResponseMessage() is reached before the proxy is updated, and therefore still uses the previous proxy and is silently dropped. Later calls work, and there's also no issue upon first page load as, at this point, javaScriptReplyProxy is null and the old evaluateJavascript path is used instead.

Expected Behavior

All plugin calls of the new page should go through the updated proxy.

Project Reproduction

Reproduced in a private repo

Additional Information

The bug is avoidable with android.useLegacyBridge = true as this routes every response through evaluateJavascriptand avoids the proxy entirely.

I've locally fixed the bug by swapping the two lines above, i.e., making sure the proxy is updated before the message post.

Langage dominant
TypeScript
Étoiles
16.7k
Forks
1.3k
Merge moyen
3 j 10 h
PR mergées (30 j)
10

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de ionic-team/capacitor

Toutes les issues de ionic-team/capacitor

Issues similaires

Plus d'issues TypeScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.