2
votes

Comment pouvons-nous accéder à l'activité à partir de l'événement de clic sur le bouton de la page Web?

J'ai deux boutons dans la vue Web. Je souhaite attribuer manuellement des événements de clic à leur. Voici mon code;

Code de la page Web

   mWebview.loadUrl(link);

            mWebview.setWebChromeClient(new WebChromeClient() {
                @Override
                public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                    //Required functionality here
                    return super.onJsAlert(view, url, message, result);
                }});
            mWebview.addJavascriptInterface(new WebAppInterface(this), "AndroidInterface");
            mWebview.getSettings().setJavaScriptEnabled(true);
            mWebview.getSettings().setLoadsImagesAutomatically(true);
            mWebview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);

    public class WebAppInterface {
    Context mContext;

    // Instantiate the interface and set the context
    WebAppInterface(Context c) {
        mContext = c;
    }

    @JavascriptInterface
    public void showevent(String toast) {
        if(toast.equalsIgnoreCase("refer")){
            Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
        }else if(toast.equalsIgnoreCase("bottom_refer")){
            Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
        }
    }
}

Voici mon code java;

<form method="post" name="refer_now">
    <div class="refer-now-button">
      <!-- <button type="submit" class="refer-now-btn" id="refer-now">refer now</button> -->
      <input type="button" class="refer-now-btn" value="refer now" name="refernow" id="refernow" onClick="showAndroidToast('refer');" />
    </div>
  </form>

  <form method="post" name="refer_now_footer">
    <div class="refer-now-button">
      <!-- <button type="submit" class="refer-now-btn" id="refer_now_footer">refer now</button> -->
       <input type="button" class="refer-now-btn" value="refer now" name="refer-footer" id="refer-footer" onClick="showAndroidToast('bottom_refer');" />
    </div>
</form>

Quand j'exécute ce code; cela me donne des erreurs ci-dessous:

"Erreur de référence non interceptée: l'interface Android n'est pas définie",


3 commentaires

Copie possible de Comment effectuer un clic sur un bouton dans une vue Web Android


@ Mr.vicky ce n'est pas une réponse en double. Je veux donner à plusieurs boutons un événement de clic. Si vous pouvez me donner une meilleure solution, cela me sera utile


s'il vous plaît vérifier ma réponse ci-dessous


3 Réponses :


0
votes

Je ne sais pas si vous pouvez appeler la méthode addJavaScriptInterface plusieurs fois avec différents noms . Essayez de déplacer votre méthode performClick1 sous la même JavaScriptInterface comme:

    view.addJavascriptInterface(new Object() {
        @JavascriptInterface
        public void performClick() {
            Intent i = new Intent(FollowPageActivity.this, MyLoyaltyActivity.class);
            startActivity(i);
        }

        @JavascriptInterface
        public void performClick1() {
            Intent i = new Intent(FollowPageActivity.this, MyLoyaltyActivity.class);
            startActivity(i);
        }
    }, "refer_now");// identify which button you click


2 commentaires

Pouvez-vous me dire comment puis-je accéder à une activité particulière des applications en cliquant sur le bouton de la page Web?


Avez-vous été incapable de naviguer vers l'activité comme vous l'avez mentionné en question? Sinon, jetez un œil à @ stackoverflow.com/a/9194012/1496502



0
votes

Le formulaire avec le nom refer_now serait affecté à la même propriété de l'objet global window .

Cela signifie que refer_now dans onclick = "refer_now.performClick ();" était l'élément de formulaire.

La clé est assurez-vous que le nom du formulaire et le nom de javascriptinterface sont différents.

Voici une solution: gardez le code java et changez le html avec ce qui suit:

  <form method="post" name="refer_now_form">
    <div class="refer-now-button">
      <!-- <button type="submit" class="refer-now-btn" id="refer-now">refer now</button> -->
      <input type="submit" class="refer-now-btn" value="refer now" name="refernow" id="refernow" onclick="refer_now.performClick();" />
    </div>
  </form>

 <form method="post" name="refer_now_footer_form">
    <div class="refer-now-button">
      <!-- <button type="submit" class="refer-now-btn" id="refer_now_footer">refer now</button> -->
       <input type="submit" class="refer-now-btn" value="refer now" name="refer-footer" id="refer-footer" onclick="refer_now_footer.performClick1();" />
    </div>
</form>


6 commentaires

Comment puis-je atteindre cet objectif


Ligne KEY

. Votre code était . Les attributs de nom sont différents


J'ai donc besoin d'écrire «formulaire» dans le champ de nom de chaque bouton?


Assurez-vous simplement que le nom du formulaire et le deuxième paramètre dans l'appel view.addJavascriptInterface ne sont pas les mêmes.


Veuillez écrire le code java dans votre réponse ainsi que le code js


Pour que je puisse appliquer le code et marquer ainsi que vérifier votre réponse



1
votes

Pour effectuer un clic sur le bouton à partir de la vue Web sous Android:

HTML et Java script

package com.ellvar.Activity.Common.Activity;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.JavascriptInterface;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.Toast;

import com.ellvar.CustomView.CustomDialog;
import com.ellvar.CustomView.CustomProgressDialog;
import com.ellvar.R;
import com.ellvar.Utils.Utility;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class TermsConditionActivitydemo extends AppCompatActivity {

    @BindView(R.id.wv_termscondition)
    WebView wvTermscondition;
    @BindView(R.id.iv_back)
    ImageView ivBack;
    CustomProgressDialog progressDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_terms_condition);
        ButterKnife.bind(this);
        if (!Utility.getInstance().isNetworkAvailable(this)) {
            CustomDialog.getInstance().showalert(this, getString(R.string.please_check_internet_connection));
        }else{
            loaddata();
        }
    }
    private void loaddata() {
        wvTermscondition.loadUrl("file:///android_asset/index.html");
        wvTermscondition.setWebChromeClient(new WebChromeClient() {
                                  @Override
                                  public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                                      //Required functionality here
                                      return super.onJsAlert(view, url, message, result);
                                  }});
        wvTermscondition.addJavascriptInterface(new WebAppInterface(this), "AndroidInterface");
        wvTermscondition.getSettings().setJavaScriptEnabled(true);
        wvTermscondition.getSettings().setLoadsImagesAutomatically(true);
        wvTermscondition.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
    }


    @OnClick(R.id.iv_back)
    public void onViewClicked() {
        finish();
    }


    public class WebAppInterface {
        Context mContext;

        // Instantiate the interface and set the context
        WebAppInterface(Context c) {
            mContext = c;
        }

        @JavascriptInterface
        public void showToast(String toast) {
            if(toast.equalsIgnoreCase("OK")){
                Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
            }else if(toast.equalsIgnoreCase("MR.VICKY")){
                Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
            }
        }
    }


}

Code JAVA

<!DOCTYPE html>
<html lang="en">
<body>
<input type="button"  value="Say hello" onClick="showAndroidToast('OK')" />
<input type="button"  value="hello mr.vicky" onClick="showAndroidToast('MR.VICKY')" />
<br/><br/>

<script type="text/javascript">
        <!-- Sending value to Android -->
        function showAndroidToast(toast) {
            AndroidInterface.showToast(toast);
        }
      </script>
</body>
</html>

OUTPUT

 entrez la description de l'image ici


4 commentaires

Salut j'ai eu une erreur: "Erreur de référence non capturée: AndroidInterface n'est pas définie"


Qu'est-ce que ça veut dire?


J'ai pris toutes les références de votre code, j'ai toujours la même erreur


Veuillez essayer de créer un nouveau projet et juste après ces deux fichiers parce que je l'ai fait avec succès et téléchargé la sortie également.