Réalisation directe des appels de java vers javascript avec Phonegap

J'écris un plugin natif pour lancer un événement en JavaScript lorsque le clavier s'affiche. Je fais ça:

appView.sendJavascript("cordova.fireWindowEvent('show_keyboard')") 

Dans mon JavaScript, je fais quelque chose comme:

 window.addEventListener('show_keyboard', handler); 

Cependant, cela a été signalé comme un grand non non dans PhoneGap par un expert PhoneGap sur l'équipe. Qu'est-ce qui ne va pas avec cette approche?

  • TypeError "Impossible de définir la connexion de propriété de # <Navigator>" dans la console lors de la mise à niveau du projet vers la dernière version de Cordova 4.0.0
  • Android - Comment exécuter l'intention de JavaScript
  • WebApp utilisant WebRTC pour vidéochat multiplate-forme dans iOS Browser et Android Chrome
  • L'image de contact de Phonegap n'est pas affichée
  • Revue tardive de Webview Android
  • La visualisation Web d'Android ne peut pas gérer javascript?
  • Comment améliorer les performances du menu JS Draggable dans WebView sur Android
  • Comment obtenir le bouton Suivant sur Softkeyboard Android à la place de Go Button dans phonegap
  • 2 Solutions collect form web for “Réalisation directe des appels de java vers javascript avec Phonegap”

    Vous recherchez une réponse à partir de sources crédibles et / ou officielles.

    Eh bien, je ne suis pas un expert de PhoneGap, mais Apache Cordova , le moteur qui gère PhoneGap a sa source sur GitHub .

    Que dit la source?

    Eh bien, à titre d'exemple, regardons comment Cordova envoie son événement de volumedownbutton . Je présente les lignes 613-621 de CordovaWebView.java :

     if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { this.loadUrl("javascript:cordova.fireDocumentEvent('volumedownbutton');"); return true; } // If volumeup key else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) { this.loadUrl("javascript:cordova.fireDocumentEvent('volumeupbutton');"); return true; } 

    Il semblerait que Cordova utilise une approche similaire pour envoyer des événements à JavaScript.

    Quel est le problème avec ce que vous avez?

    Je ne suis pas sûr de la question exacte que votre collègue a soulevée, mais il semble que sendJavascript soit obsolète . Donc, c'est ça. Mais si votre appView est une CordovaWebView , vous pouvez simplement appeler loadUrl de la même manière que Cordova lui-même le fait (comme indiqué ci-dessus).

    Je ne suis pas expert en téléphonie, mais pourquoi n'appelez-vous que la méthode directement au lieu d'utiliser les auditeurs?

    par exemple

     function keyboardShown() { alert("test"); //or other code } 

    et

     appView.sendJavascript("keyboardShown();") 

    De cette façon, vous supprimez les frais généraux que vous avez à travers l'auditeur.

    Si cela ne satisfait toujours pas votre expert Phonegap, demandez-lui ce qu'il fera pour améliorer ce code.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.