Android
WebView
खोज…
परिचय
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");