JavaScript-Warnung funktioniert nicht in Android WebView

88

In meiner Anwendung, die ich verwende, WebViewund in der ich die JavaScript alert( )Methode verwende, aber sie funktioniert nicht, wird kein Popup angezeigt.

in meiner Manifestdatei habe ich hinzugefügt

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

und in Aktivitätsdatei habe ich hinzugefügt

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

In Layout-XML-Datei habe ich hinzugefügt

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

Irgendwelche Hinweise, wie man Full- JavaScriptIn aktiviert WebView?


Aktualisieren

Danke mark
die alert()Methode in der htmlDatei funktioniert jetzt :).

Jetzt gibt es zwei Probleme in WebView:
1: Ich verwende eine <textarea>in der HTML-Datei, in die ich lade WebView, und versuche, in Hindi-Sprache zu schreiben, aber wenn ich versuche, Hindi-Text zu schreiben, wird er als Symbole angezeigt (Rechtecksymbole wie []).

Wenn ich das gleiche im Firefox-Browser auf dem Desktop mache, funktioniert es gut. Gibt es einen Hinweis, wie man Unterstützung für mehrere Sprachen in textareain gibt WebView?

2: Wenn ich auf "Senden" klicke und versuche, den Wert von Text in der alert()Methode in einem anderen Java-Skript zu öffnen , funktioniert dies nicht. Bedeutet dies, dass es WebChromeClient nur für die aktuell geladene HTML-Seite gilt und nicht javascriptsvon dieser Seite aufgerufen wird?

user655192
quelle
6
Es ist "JavaScript", nicht "Java Script", "Java-Script" oder "Java Script" (alle in Ihrer ursprünglichen Frage). Ich habe es für dich korrigiert.
TJ Crowder
3
@TJCrowder Ich würde sagen, es sollte Javascript heißen .
Kris Selbekk
7
@KrisSelbekk: Nein. :-) "JavaScript" ist eine eingetragene Marke von Oracle (ich muss Fusionen und Übernahmen lieben) und wird (mit Genehmigung) von Mozilla für deren Implementierung verwendet. In beiden Fällen mit der Hauptstadt S. Das ist die einzige normative Form dieses Namens. Der andere Name für die Sprache ist natürlich ECMAScript (oder ES), aber niemand verwendet ihn wirklich, außer wenn es um ES5 geht .
TJ Crowder

Antworten:

88

Überprüfen Sie diesen Link und den letzten Kommentar, den Sie WebChromeClientfür Ihren Zweck verwenden müssen.

saß
quelle
8
Danke! webView.setWebChromeClient (neuer WebChromeClient () {@Override public boolean onJsAlert (WebView-Ansicht, String-URL, String-Nachricht, JsResult-Ergebnis) {return super.onJsAlert (Ansicht, URL, Nachricht, Ergebnis);}});
Nurnachman
Ihr Kommentar hat mir geholfen ... ebenso wie die Antwort von Nikhil unten.
Vamsi Challa
Funktioniert wie Charme. Aber dann ... hat WebClient einen Vorteil gegenüber WebChromeClient.
Josh
3
Es mag eine dumme Frage sein, aber trotzdem: Warum eine Methode überschreiben, um nur die Methode eines Super mit denselben Parametern aufzurufen?
Dmitry Andrievsky
1
Vergessen Sie nicht hinzuzufügenwebview.getSettings().setJavaScriptEnabled(true);
Jemshit Iskenderov
117

Wie bereits erwähnt, muss der WebChromeClient festgelegt werden, damit alert()die Arbeit beginnen kann. Es reicht aus, nur den Standard-WebChromeClient () festzulegen:

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

Vielen Dank für alle Kommentare unten. Einschließlich John Smiths, der angab, dass Sie JavaScript aktivieren müssen.

Stephen Quan
quelle
Ja, aber meistens möchten Sie mit den Ereignissen des WebChromeClient optimieren, also ...
Radu Simionescu
10
Ich habe es endlich geschafft, dass es funktioniert, indem ich mWebView.getSettings().setJavaScriptEnabled(true);vor der Zeile hinzugefügt habe mWebView.setWebChromeClient(new WebChromeClient());
John Smith Optional
2
Vergessen Sie nicht hinzuzufügenwebview.getSettings().setJavaScriptEnabled(true);
Jemshit Iskenderov
22
webView.setWebChromeClient(new WebChromeClient() {
    @Override
    public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
        return super.onJsAlert(view, url, message, result);
    }
});
Nikhil Dinesh
quelle
Dies funktioniert hervorragend, aber wenn ich promptaus Javascript anrufe, wird anstelle des Aufforderungstextes "Die Seite unter https: // ... sagt:" angezeigt, wodurch das Eintauchen des in die App eingebetteten WebView vollständig unterbrochen wird
Michael,
5

Der folgende Code funktioniert:

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");
}
user1645162
quelle
0

Sie können es versuchen, es hat bei mir funktioniert

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

    });
Tarit Ray
quelle