J'essayais de détecter le clic du bouton html de la vue Web en code Java (en activité).
J'ai référé un autre SO
Détecter, cliquez sur le bouton HTML via JavaScript dans Android WebView
mais ne fonctionne pas.Mon code:
index.html
<html>
<head>
<script language="javascript">
function js1() {
document.loginform.method="post";
document.loginform.action = "https://example.com/chechlogin.asp";
}
</script>
</head>
<body>
<form name="loginform">
<input type="text" name="empcode" value="58686" /><br/>
<input type="password" name="emppassNTL" />
<input type="submit" name="submit" id="submit_id" onclick="login.performClick();" />
</form>
</body>
</html>
MainActivity.Java
package com.example.webview;
import Android.os.Bundle;
import Android.annotation.SuppressLint;
import Android.app.Activity;
import Android.util.Log;
import Android.view.Menu;
import Android.view.View;
import Android.view.Window;
import Android.webkit.JavascriptInterface;
import Android.webkit.WebSettings;
import Android.webkit.WebView;
import Android.webkit.WebViewClient;
import Android.widget.EditText;
import Android.widget.TextView;
import Android.widget.Toast;
@SuppressLint("SetJavaScriptEnabled")
public class MainActivity extends Activity {
private EditText field;
private WebView browser;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
field = (EditText)findViewById(R.id.urlField);
browser = (WebView)findViewById(R.id.webView1);
browser.getSettings().setJavaScriptEnabled(true);
browser.setWebViewClient(new MyBrowser());
browser.loadUrl("file:///Android_asset/index.html");
}
@SuppressLint("JavascriptInterface")
public void open(View view){
String url = field.getText().toString();
browser.getSettings().setLoadsImagesAutomatically(true);
browser.getSettings().setJavaScriptEnabled(true);
browser.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
browser.loadUrl(url);
browser.addJavascriptInterface(new Object()
{
@JavascriptInterface
public void performClick()
{
Log.d("LOGIN::", "Clicked");
Toast.makeText(MainActivity.this, "Login clicked", Toast.LENGTH_LONG).show();
}
}, "login");
}
private class MyBrowser extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Mais la méthode performClick () n'est pas appelée.
.__ Veuillez corriger l'erreur.
Voici comment j'ai implémenté:
public class FirstActivity extends Activity {
WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
mWebView = (WebView) findViewById(R.id.webView1);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setDomStorageEnabled(true);
mWebView.addJavascriptInterface(new WebAppInterface(this), "Android");
mWebView.loadUrl("file:///Android_asset/html/File1.html");
}
public class WebAppInterface {
Context mContext;
/** Instantiate the interface and set the context */
WebAppInterface(Context c) {
mContext = c;
}
/** Show a toast from the web page */
@JavascriptInterface
public void nextScreen(String pro_cat_id) {
startActivity(new Intent(mContext,
MainActivity.class));
}
Et, dans le fichier html:
javascript: file3.js
function saveId(_id)
{
localStorage.setItem("id", _id);
Android.nextScreen(_id);
}
HTML:
<html>
<head>
<script type="text/javascript" src="arel/js/File3.js"></script>
</head>
<body>
<button onClick="saveId('1');">1</button>
<button onClick="saveId('2');">2</button>
</body>
</html>
essayez de repalce cela
browser.addJavascriptInterface(new Object()
{
@JavascriptInterface
public void performClick()
{
Log.d("LOGIN::", "Clicked");
Toast.makeText(MainActivity.this, "Login clicked", Toast.LENGTH_LONG).show();
}
}, "login");
pour ça
Button btnLogin=new Button(ctx);
btnLogin.setOnClickListener(this);
browser.addJavascriptInterface(btnLogin,"login");
@Override
public void onClick(View v) {
//do Something
}
et dans index.html
<html> <head> <script language="javascript"> function js1() {
document.loginform.method="post"; document.loginform.action = "https://example.com/chechlogin.asp";
}
</script> </head> <body> <form name="loginform">
<input type="text" name="empcode" value="58686" /><br/>
<input type="password" name="emppassNTL" />
<input type="submit" name="submit" id="submit_id" onclick="btnLogin.performClick();" />
Plus d'infos ici: https://developer.Android.com/guide/webapps/webview.html#BindingJavaScript
Vous devez créer et transmettre une interface JavaScript d'Android à JavaScript. Vous pouvez ensuite utiliser cette interface en tant que pont pour passer des appels de fonction avec des arguments.
Plus de détails et d'exemples ici: http://developer.Android.com/guide/webapps/webview.html#BindingJavaScript
Ooops !!!
La méthode performClick () était au mauvais endroit.
MainActivity.Java devrait ressembler à ceci:
package com.example.webview;
import Android.os.Bundle;
import Android.annotation.SuppressLint;
import Android.app.Activity;
import Android.util.Log;
import Android.view.Menu;
import Android.view.View;
import Android.view.Window;
import Android.webkit.JavascriptInterface;
import Android.webkit.WebSettings;
import Android.webkit.WebView;
import Android.webkit.WebViewClient;
import Android.widget.EditText;
import Android.widget.TextView;
import Android.widget.Toast;
@SuppressLint("SetJavaScriptEnabled")
public class MainActivity extends Activity {
private WebView browser;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
browser = (WebView)findViewById(R.id.webView1);
browser.getSettings().setJavaScriptEnabled(true);
browser.getSettings().setLoadsImagesAutomatically(true);
browser.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
browser.setWebViewClient(new MyBrowser());
browser.loadUrl("file:///Android_asset/index.html");
}
private class MyBrowser extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
view.addJavascriptInterface(new Object()
{
@JavascriptInterface
public void performClick() throws Exception
{
Log.d("LOGIN::", "Clicked");
Toast.makeText(MainActivity.this, "Login clicked", Toast.LENGTH_LONG).show();
}
}, "login");
return true;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Tout d'abord, créez un bouton avec le nom BtnLogin with method performClick () comme ci-dessous:
<input type="submit" name="submit" id="submit_id" onclick="BtnLogin.performClick();" />
Maintenant, dans Android (Activité ou Fragment), vous utiliserez le code ci-dessous:
private class MyBrowser extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
view.addJavascriptInterface(new Object()
{
@JavascriptInterface
public void performClick() throws Exception //method which you call on button click on HTML page
{
Log.d("LOGIN::", "Clicked");
Toast.makeText(MainActivity.this, "Login clicked", Toast.LENGTH_LONG).show();
}
}, "BtnLogin");// identify which button you click
return true;
}
}
J'espère que ça va aider.