Suche…


Einführung

WebView ist eine Ansicht, die Webseiten in Ihrer Anwendung anzeigt. Hiermit können Sie Ihre eigene URL hinzufügen.

Bemerkungen

Vergessen Sie nicht, die Erlaubnis in Ihre Android-Manifestdatei aufzunehmen

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

JavaScript-Warnungsdialogfelder in WebView - So funktionieren sie

Standardmäßig implementiert WebView keine JavaScript-Warnungsdialogfelder, z. alert() tut nichts. Um dies zu ermöglichen, müssen Sie zunächst JavaScript aktivieren (offensichtlich ..) und dann einen WebChromeClient , um Anforderungen für WebChromeClient auf der Seite zu bearbeiten:

webView.setWebChromeClient(new WebChromeClient() {
    //Other methods for your WebChromeClient here, if needed..

    @Override
    public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
        return super.onJsAlert(view, url, message, result);
    }
});

Hier überschreiben wir onJsAlert und rufen dann die Super-Implementierung auf, die uns einen Standard-Android-Dialog gibt. Sie können die Nachricht und die URL auch selbst verwenden, z. B. wenn Sie ein benutzerdefiniertes Dialogfenster erstellen möchten oder wenn Sie sie protokollieren möchten.

Kommunikation von Javascript nach Java (Android)

Android-Aktivität

package com.example.myapp;

import android.os.Bundle;
import android.app.Activity;
import android.webkit.WebView;

public class WebViewActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        WebView webView = new WebView(this);
        setContentView(webView);

       /* 
        *   Note the label Android, this is used in the Javascript side of things
        *   You can of course change this.
        */
        webView.addJavascriptInterface(new JavascriptHandler(), "Android");
    
        webView.loadUrl("http://example.com");
    }
}

Java-Javascript-Handler

import android.webkit.JavascriptInterface;

public class JavascriptHandler {

    /**
     *  Key point here is the annotation @JavascriptInterface
     *
     */
    @JavascriptInterface
    public void jsCallback() {
       // Do something
    }

    @JavascriptInterface
    public void jsCallbackTwo(String dummyData) {
       // Do something
    }
}

Webseite, Javascript aufrufen

<script>
... 
Android.jsCallback();
...
Android.jsCallback('hello test');
...
</script>

Extra Tipp

Eine mögliche Lösung, die eine komplexe Datenstruktur übergibt, ist JSON.

Android.jsCallback('{ "fake-var" : "fake-value", "fake-array" : [0,1,2] }');

Verwenden Sie auf der Android-Seite Ihren bevorzugten JSON-Parser, z

Kommunikation von Java nach Javascript

Basisbeispiel

package com.example.myapp;

import android.os.Bundle;
import android.app.Activity;
import android.webkit.WebView;

public class WebViewActivity extends Activity {
    
    private Webview webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);

       webView = new WebView(this);
       webView.getSettings().setJavaScriptEnabled(true);

       setContentView(webView);

       webView.loadUrl("http://example.com");

       /*
        * Invoke Javascript function
        */
       webView.loadUrl("javascript:testJsFunction('Hello World!')");
    }

   /**
    * Invoking a Javascript function
    */
   public void doSomething() {
     this.webView.loadUrl("javascript:testAnotherFunction('Hello World Again!')");
   }
}

Dialer-Beispiel öffnen

Wenn die Webseite a eine Telefonnummer enthält, können Sie mit dem Telefon Ihres Telefons einen Anruf tätigen. Dieser Code prüft die URL, die mit tel: beginnt: Warten Sie dann auf Dialer, und Sie können die geklickte Telefonnummer anrufen:

public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if (url.startsWith("tel:")) { 
            Intent intent = new Intent(Intent.ACTION_DIAL,
                    Uri.parse(url)); 
            startActivity(intent); 
    }else if(url.startsWith("http:") || url.startsWith("https:")) {
        view.loadUrl(url);
    }
    return true;
}

Fehlerbehebung für WebView durch Drucken von Konsolennachrichten oder durch Remote-Debugging

Meldungen der Webview-Konsole in logcat drucken

Um console von Webseiten zu verarbeiten, können Sie onConsoleMessage in WebChromeClient :

final class ChromeClient extends WebChromeClient {
    @Override
    public boolean onConsoleMessage(ConsoleMessage msg) {
        Log.d(
            "WebView", 
            String.format("%s %s:%d", msg.message(), msg.lineNumber(), msg.sourceId())
        );
        return true;
    }
}

Und setze es in deine Aktivität oder dein Fragment:

webView.setWebChromeClient(new ChromeClient());

Also diese Beispielseite:

<html>
<head>
    <script type="text/javascript">
        console.log('test message');
    </script>
</head>
<body>
</body>
</html>

schreibt Protokoll 'Testnachricht' in Logcat:

WebView: Testnachricht sample.html: 4

console.info() , console.warn() und console.error() werden ebenfalls von Chrome-Client unterstützt.

Remote-Debugging von Android-Geräten mit Chrome

Ihre Webview-basierte Remote-Anwendung kann von Ihrem Desktop-Chrome aus ferngesteuert werden.

Aktivieren Sie das USB-Debugging auf Ihrem Android-Gerät

Öffnen Sie auf Ihrem Android-Gerät Einstellungen, finden Sie den Abschnitt Entwickleroptionen und aktivieren Sie das USB-Debugging.

Verbinden Sie sich und entdecken Sie Ihr Android-Gerät

Öffnen Sie die folgende Seite in Chrome: Chrome: // inspect / # devices

Wählen Sie im Dialogfeld "Geräte prüfen" Ihr Gerät aus und drücken Sie auf "Prüfen". Auf Ihrem Entwicklungscomputer wird eine neue Instanz von Chrome DevTools geöffnet.

Detailliertere Richtlinie und Beschreibung von DevTools finden Sie unter developers.google.com

Lokale Datei öffnen / Dynamischen Inhalt in Webview erstellen

Layout.xml

                <WebView
                android:id="@+id/WebViewToDisplay"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_gravity="center"
                android:fadeScrollbars="false" />

Laden Sie Daten in WebViewToDisplay

        WebView webViewDisplay;
        StringBuffer LoadWEb1;

        webViewDisplay = (WebView) findViewById(R.id.WebViewToDisplay);
        LoadWEb1 = new StringBuffer();
        LoadWEb1.append("<html><body><h1>My First Heading</h1><p>My first paragraph.</p>");
        //Sample code to read parameters at run time
        String strName = "Test Paragraph";
        LoadWEb1.append("<br/><p>"+strName+"</p>");
        String result = LoadWEb1.append("</body></html>").toString();
                WebSettings webSettings = webViewDisplay.getSettings();
                webSettings.setJavaScriptEnabled(true);
                webViewDisplay.getSettings().setBuiltInZoomControls(true);
                if (android.os.Build.VERSION.SDK_INT >= 11){
                    webViewDisplay.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
                    webViewDisplay.getSettings().setDisplayZoomControls(false);
                }

                webViewDisplay.loadDataWithBaseURL(null, result, "text/html", "utf-8",
                        null);
                //To load local file directly from assets folder use below code
                //webViewDisplay.loadUrl("file:///android_asset/aboutapp.html");


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow