Comment nous pouvons exécuter une fonction javascript et d'obtenir une valeur de retour dans notre application android?
Comment nous pouvons exécuter une fonction javascript et d'obtenir une valeur de retour dans notre application android ?
Nous voulons exécuter un javascript sur un bouton de presse de l'événement, nous avons besoin de passer des paramètres au script et obtenir les valeurs de retour, nous sommes Donc à l'aide de "WebChromeClient" pour le mettre en œuvre,
Mais nous avons une Exception est "SyntaxError: Parse error à l'indéfini:1"
Voici mon code
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
public class FirstTab extends Activity
{
private WebView webView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.regis);
try{
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new MyWebChromeClient());
String customHtml = "<html><head><title>iSales</title><script type=\"text/javascript\"> function fieldsOnDelete(){ var x=123; return \"JIJO\"; } </script></head><body>hi</body></html>";
webView.loadData(customHtml, "text/html","UTF-8");
}catch(Exception e)
{
Log.v("JAC LOG",e.toString());
}
}
public void onResume()
{
super.onResume();
final Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try{
webView.loadUrl("javascript:alert(javascript:fieldsOnDelete())");
}
catch(Exception e)
{
Log.v("JAC LOG",e.toString());
}
}
});
}
final class MyWebChromeClient extends WebChromeClient {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Log.v("LogTag", message);
result.confirm();
return true;
}
}
}
saisirpeut-il aide à résoudre votre problème
OriginalL'auteur | 2012-11-23
Vous devez vous connecter pour publier un commentaire.
vous pouvez utiliser
mWebView.loadUrl("javascript:checkName");
pour appeler la méthode...Ensuite, vous pouvez utiliser
addJavascriptInterface()
pour ajouter un objet Java vers Javascript de l'environnement. Votre Java script appeler une méthode sur cet objet Java pour la fourniture de sa "valeur de retour".EDIT1: Ou vous pouvez utiliser la suite hack:
Ajouter ce Client à votre WebView:
Maintenant dans votre java script d'appel n':
Maintenant dans le onJsAlert appel "
message
" contient la valeur de retour.Edit2:
Donc il ne fonctionne pas si nous appelons la méthode javascript juste après l'appel à la charge de l'URL depuis le chargement de la page prend du temps. J'ai donc créé un programme de test pour le test...
Voici mon fichier html (nommé test.html) magasin dans le dossier assets:
Qui suit est ma classe java qui pourrait se que je voudrais ajouter à java script d'interface et de recevoir de la valeur de retour:
Et qui suit est ma classe d'activité:
La clé ici est qu'il devrait y avoir un intervalle de temps entre l'appel de charger un fichier html à partir d'éléments de dossier et l'appel à
javascript:method
. Ici, je suis de l'appeler à partironOptionsItemSelected
et il fonctionne très bien.. si je déplace lewebView.loadUrl("javascript:fieldsOnDelete('name');");
à la fin de la onCreate() la méthode la il montre que l'erreur qu'il ne peut pas trouverfieldsOnDelete()
méthode...Espère que ça Aide...
EDIT3:
Remplacer suivantes dans votre code
avec
et essayer...
essayez d'appeler
mWebView.loadUrl("javascript:checkName");
après l'appel de lawebView.loadData(customHtml, "text/html", "UTF-8");
a qui a fonctionné??
Nous avons essayé de webView.loadUrl("javascript:alert(javascript:fieldsOnDelete())"); pour obtenir la valeur de retour, mais nous avons eu "SyntaxError: Parse error à l'indéfini:1 message dans la console web de la Balise, mais son beau travail pour webView.loadUrl("javascript:var x=123;alert(x)");
je vais l'essayer et de vous laisser maintenant, si cela fonctionne..
OriginalL'auteur Praful Bhatnagar
Dans Android KitKat il y a une nouvelle méthode evaluateJavascript qui a un rappel pour une valeur de retour. Le callback retourne une valeur JSON, objet ou d'un tableau en fonction de ce que vous retourner.
Vous pouvez voir un exemple complet ici: https://github.com/GoogleChrome/chromium-webview-samples/tree/master/jsinterface-example
OriginalL'auteur Matt Gaunt