खोज…


परिचय

WebView एक ऐसा दृश्य है जो आपके एप्लिकेशन के अंदर वेब पेज प्रदर्शित करता है। इसके द्वारा आप अपना खुद का URL जोड़ सकते हैं।

टिप्पणियों

कृपया अपने Android मेनिफ़ेस्ट फ़ाइल में अनुमति जोड़ना न भूलें

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

WebView में जावास्क्रिप्ट अलर्ट डायलॉग - उन्हें कैसे काम करना है

डिफ़ॉल्ट रूप से, WebView जावास्क्रिप्ट अलर्ट संवादों को लागू नहीं करता है, अर्थात। alert() कुछ नहीं करेगा। आपको पहले जावास्क्रिप्ट (स्पष्ट रूप से ..) को सक्षम करने की आवश्यकता है, और फिर पृष्ठ से चेतावनी संवाद के अनुरोधों को संभालने के लिए एक WebChromeClient सेट करें:

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

यहां, हम onJsAlert ओवरराइड onJsAlert , और फिर हम सुपर कार्यान्वयन के माध्यम से कॉल करते हैं, जो हमें एक मानक एंड्रॉइड डायलॉग देता है। आप स्वयं भी संदेश और URL का उपयोग कर सकते हैं, उदाहरण के लिए यदि आप एक कस्टम स्टाइल डायलॉग बनाना चाहते हैं या यदि आप उन्हें लॉग इन करना चाहते हैं।

जावास्क्रिप्ट से जावा (Android) के लिए संचार

Android गतिविधि

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

जावा जावास्क्रिप्ट हैंडलर

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

वेब पेज, जावास्क्रिप्ट कॉल

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

अतिरिक्त टिप

एक जटिल डेटा संरचना में पास होना, एक संभावित समाधान JSON का उपयोग करना है।

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

Android ओर अपने पसंदीदा JSON पार्सर का उपयोग करें अर्थात: JSONObject

जावा से जावास्क्रिप्ट में संचार

मूल उदाहरण

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!')");
   }
}

डायलर उदाहरण खोलें

यदि वेब पेज में फोन नंबर है तो आप अपने फोन के डायलर का उपयोग करके कॉल कर सकते हैं। यह कोड उस url की जाँच करता है जो tel से शुरू होता है: फिर डायलर खोलने का इरादा बनाते हैं और आप क्लिक करने वाले फ़ोन पर कॉल कर सकते हैं:

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

कंसोल संदेश या दूरस्थ डीबगिंग को मुद्रित करके WebView का समस्या निवारण

लॉग ऑन करने के लिए मुद्रण वेबव्यू कंसोल संदेश

वेब पेज से console संदेशों को संभालने के लिए आप onConsoleMessage में WebChromeClient से WebChromeClient onConsoleMessage सकते हैं:

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

और इसे अपनी गतिविधि या टुकड़े में सेट करें:

webView.setWebChromeClient(new ChromeClient());

तो यह नमूना पृष्ठ:

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

logcat पर लॉग 'टेस्ट मैसेज' लिखेंगे:

WebView: परीक्षण संदेश sample.html: 4

console.info() , console.warn() और console.error() भी क्रोम-क्लाइंट द्वारा समर्थित हैं।

Chrome के साथ दूरस्थ डीबगिंग Android डिवाइस

आप अपने डेस्कटॉप क्रोम से वेबवार्ता आधारित अनुप्रयोग को दूरस्थ डिबग कर सकते हैं।

अपने Android डिवाइस पर USB डिबगिंग सक्षम करें

अपने Android डिवाइस पर, सेटिंग खोलें, डेवलपर विकल्प अनुभाग ढूंढें, और USB डीबगिंग सक्षम करें।

कनेक्ट करें और अपने Android डिवाइस की खोज करें

क्रोम में निम्नलिखित पेज खोलें: क्रोम: // निरीक्षण / # उपकरणों

इंस्पेक्ट डिवाइसेज डायलॉग से, अपने डिवाइस का चयन करें और इंस्पेक्ट को दबाएं। Chrome का DevTools का एक नया उदाहरण आपकी विकास मशीन पर खुलता है।

अधिक विस्तृत दिशानिर्देश और DevTools का विवरण Developers.google.com पर पाया जा सकता है

स्थानीय फ़ाइल खोलें / वेबव्यू में गतिशील सामग्री बनाएँ

Layout.xml

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

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
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow