web-dev-qa-db-fra.com

Alerte JavaScript ne fonctionne pas dans Android WebView

Dans mon application, j'utilise WebView et comme j'utilise la méthode JavaScript alert( ) mais que cela ne fonctionne pas, aucune fenêtre contextuelle ne s'affiche.

dans mon fichier manifeste j'ai ajouté 

<uses-permission Android:name="Android.permission.INTERNET"></uses-permission>

et dans le fichier d'activité, j'ai ajouté 

mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("file:///Android_asset/demo.html");

Dans le fichier XML de mise en page, j'ai ajouté

<WebView 
    Android:id="@+id/webview"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
/>

Avez-vous une idée de la manière d'activer la variable JavaScript complète dans WebView?


Mettre à jour

Merci marque
La méthode alert() dans le fichier html fonctionne maintenant :).

Maintenant, il y a deux problèmes dans WebView:
1: J'utilise un <textarea> dans le fichier html que je charge dans WebView, et j'essaye d'écrire avec une police en langue hindi, mais lorsque j'essaie d'écrire du texte en hindi, il s'affiche sous forme de symboles (symboles rectangulaires comme [] ).

quand je fais la même chose dans le navigateur firefox sur le bureau cela fonctionne très bien . aucune idée de la façon de supporter plusieurs langues dans textarea dans WebView?

2: Lorsque je clique sur Soumettre et que j'essaie d'ouvrir la valeur du texte dans la méthode alert() dans un autre script Java, cela ne fonctionne pas. Cela signifie-t-il que même après avoir utilisé WebChromeClient , Il s'applique uniquement à la page HTML actuellement chargée et non à javascripts appelé de cette page? 

74
user655192

Vérifiez this link, et le dernier commentaire, vous devez utiliser WebChromeClient pour vos besoins.

82
sat

Comme d'autres l'ont indiqué, il est nécessaire de configurer WebChromeClient pour que alert() fonctionne. Il suffit de définir la valeur par défaut WebChromeClient ():

mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebChromeClient(new WebChromeClient());

Merci pour tous les commentaires ci-dessous. Y compris John Smith's qui a indiqué que vous deviez activer JavaScript.

97
Stephen Quan
webView.setWebChromeClient(new WebChromeClient() {
    @Override
    public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
        return super.onJsAlert(view, url, message, result);
    }
});
19
Nikhil Dinesh

Le code suivant fonctionnera: 

private WebView mWebView;
final Activity activity = this;

// private Button b;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setDomStorageEnabled(true);
    mWebView.setWebChromeClient(new WebChromeClient() {
        public void onProgressChanged(WebView view, int progress) {
            activity.setProgress(progress * 1000);
        }
    });

    mWebView.loadUrl("file:///Android_asset/raw/NewFile1.html");
}
5
user1645162

Il suffit d'ajouter 

mWebview.setWebChromeClient(new WebChromeClient());

Ça va marcher.

0
Abhilash Nair

Vous pouvez essayer avec cela, cela a fonctionné pour moi

WebView wb_previewSurvey=new WebView(this); 


       wb_previewSurvey.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);
        }

    });
0
Tarit Ray