[Bug]: Plugin call after navigation can be answered before reply proxy is updated
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
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
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de ionic-team/capacitor
-
triage
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
ionic-team/capacitor#8601 ·
-
triage
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
ionic-team/capacitor#8574 ·
-
SystemBars: safe area CSS injection throws "Cannot read properties of null" on startup (Android 16) Ouvertetriage
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
ionic-team/capacitor#8530 · 2 commentaires ·
-
triage
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
ionic-team/capacitor#8529 ·
-
needs reproduction
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
ionic-team/capacitor#8472 · 2 commentaires · 1 réaction ·
Toutes les issues de ionic-team/capacitor
Issues similaires
-
calcite-components needs triage refactor
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
Esri/calcite-design-system#15203 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 91/100
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Difficulté 1/5 Moins d'une heure Accessibilité débutants 95/100
-
Daemon passes --experimental-wasm-jspi unconditionally on Node >= 24; Node 26 rejects the flag Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Automattic/studio#4908 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 90/100