J'ai un service Web dans lequel j'ai ajouté un lecteur de code à barres pour Android

Donc, avec l'aide de JavaScript, j'appelle mon lecteur de code-barres à partir de la vue Web

Donc pour cela J'ai suivi ça

Et conçu côté serveur ... j'ai donné ceci

à JavaScript

    function mybarcd() {
           MyApp.mybarcdt();
        }

    function actfromAnd(msg){
           document.getElementById("brcd").value = msg;
       }


    at HTML/PHP

    <div class="data"> 
            <input id="brcd" type="text" value=""/>
            <button type="button" onClick="mybarcd()">SCAN</button>
    </div>

Du côté Android Dans la vue Web

    webView.addJavascriptInterface(new WebAppInterface(this), "MyApp");

et nouvelle interface js

    @JavascriptInterface
    public void mybarcdt() {

                IntentIntegrator intentIntegrator = new IntentIntegrator(Main_A.this);
                intentIntegrator.setBeepEnabled(true);
                intentIntegrator.setOrientationLocked(true);
                intentIntegrator.setPrompt("Scan Barcode");
                intentIntegrator.initiateScan();
            }



    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if (result != null) {
            if (result.getContents() == null) {
                Log.d("ScanActivity", "Cancelled scan");
                Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();

            } else {

                Log.d("ScanActivity", "Scanned");

                String bcval = result.getContents();
                if (android.os.Build.VERSION.SDK_INT < 19) {
                    webView.loadUrl("javascript:actfromAnd(\""+bcval+"\")");
                }else{
                    webView.evaluateJavascript("javascript:actfromAnd(\""+bcval+"\")", null);
                }
                System.out.println("javascript:actfromAnd(\""+bcval+"\")");

            }
        } else
            super.onActivityResult(requestCode, resultCode, data);
    }

Mon problème est que cela fonctionne bien dans un seul fichier Html / PHP avec Js sur la même page ou sur une page séparée.J'ai testé sa numérisation et la mise à jour de la valeur dans la zone de saisie ...

Mais cela ne fonctionne pas depuis que j'utilise plusieurs pages ou un cadre dans une vue Web ... sa valeur JS manquante ... Cependant, le serveur forme son scanner d'ouverture au clic ... mais après la numérisation, la valeur ne passe pas à l'entrée boîte avec JS j'obtiens cette erreur .....

I/chromium: [INFO:CONSOLE(1)] "Uncaught ReferenceError: actfromAnd is not defined", source:  (1)

Mettre à jour

1) J'ai essayé ceci dans la page statique avec JS à côté de cette page PHP / HTML
2) J'ai également essayé avec la même chose dans une page statique avec une page séparée JS
Sur les deux conditions ci-dessus, il a bien fonctionné

Mais dans mon service Web, j'ai donné le même fichier JS qui s'exécute avec succès dans la page statique J'ai un seul fichier JS pour mon service Web et la page statique fonctionne bien en statique mais ne fonctionne pas dans MON service Web en direct .. Comment JS se charge Parce que sur cliquez sur son wokring à partir de ce JS et de sa caméra d'ouverture, mais répondez après la numérisation, il ne va pas à l'entrée Web

Je comprends que j'obtiens une erreur parce que ...

Dans ma page en direct, j'ai un menu principal à l'intérieur de ce menu lorsque je sélectionne une application, son chargement dans iframe Donc, ma réponse à l'activité Android après la numérisation fait un ping vers cette page du menu principal Mais pour le menu, il n'y a pas de fonction Js nommée {{X1} } Donc j'obtiens une erreur ...

Ici, je ne peux pas donner l'URL de cette page particulière (iframe) En raison de la modification des menus, je ne peux donner qu'un lien de connexion ou de menu principal directement.Mais pas pour une page particulière dans le menu

Quelqu'un peut-il me suggérer sur ce genre ...

10
Whats Going On 1 avril 2017 à 10:10

2 réponses

Meilleure réponse

Ajoutez ce script dans le service Web de votre menu parent qui contient votre iframe ou iframes

<script>
function actfromAnd(msg){
window.frames['yourExactframe'].document.getElementById("brcd").value = msg;
}
</script>

Si vous l'utilisez dans plus d'un cadre, déclarez votre nom de cadre globalement

J'ai essayé votre code fonctionnant bien ... Dans mon exemple Frame Hope Cela fonctionne bien pour vous

Bonne question....

3
Don't Be negative 12 avril 2017 à 06:01
  • Vous devez exécuter le javascript lorsque la page est chargée

    mWebView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { webview.loadUrl("javascript:myFunction()"); } });

  • Le code sera exécuté et trouvera votre fonction javascript. La façon dont vous faites maintenant n'attend pas.

2
Ravindra Kushwaha 4 juin 2020 à 08:57