एंड्रॉइड WebView में आंतरिक पेज नेविगेशन अनुमति देना
यह उदाहरण दर्शाता है कि WebViewClient का उपयोग करके WebView के अंदर लिंक क्लिक पर बाहरी ब्राउज़र खुलने के बजाय उसी WebView में पेज लोड कैसे करें।
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में नया प्रोजेक्ट बनाएं।
चरण 2: लेआउट फ़ाइल
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity">
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
चरण 3: MainActivity.java
package com.example.myapplication;
import android.app.ProgressDialog;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.webkit.CookieManager;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
private WebView webView;
@RequiresApi(api = Build.VERSION_CODES.P)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setMessage("लोड हो रहा है...");
progressDialog.setCancelable(false);
webView = findViewById(R.id.web_view);
webView.setVerticalScrollBarEnabled(true);
webView.requestFocus();
webView.canGoForward();
WebSettings settings = webView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
settings.setJavaScriptEnabled(true);
settings.setDomStorageEnabled(true);
settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);
settings.setDisplayZoomControls(false);
// कुकीज़ इनेबल करें (लॉगिन के लिए महत्वपूर्ण)
CookieManager.getInstance().setAcceptCookie(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true);
}
webView.loadUrl("https://touch.facebook.com/");
// आंतरिक नेविगेशन के लिए WebViewClient
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// सभी URL को इसी WebView में लोड करें
view.loadUrl(url);
return true; // true = हम हैंडल करेंगे, ब्राउज़र नहीं खुलेगा
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// पेज लोड पूरा होने पर कुकीज़ सिंक करें
CookieManager.getInstance().flush();
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
// एरर हैंडलिंग
}
});
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int progress) {
if (progress < 100) {
progressDialog.show();
}
if (progress == 100) {
progressDialog.dismiss();
}
}
});
}
// बैक बटन हैंडलिंग - WebView हिस्ट्री में पीछे जाएं
@Override
public void onBackPressed() {
if (webView != null && webView.canGoBack()) {
webView.goBack(); // पिछला पेज खोलें
} else {
super.onBackPressed(); // कोई पिछला पेज नहीं तो ऐप बंद करें
}
}
}
चरण 4: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.myapplication">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
</intent-filter>
</activity>
</application>
</manifest>
मुख्य बिंदु
shouldOverrideUrlLoading()मेंreturn trueऔरview.loadUrl(url)- लिंक इसी WebView में खुलते हैंonBackPressed()ओवरराइड करके WebView हिस्ट्री नेविगेशन इनेबल करें- कुकीज़ इनेबल करना लॉगिन/सेशन के लिए आवश्यक
canGoBack()औरgoBack()से हिस्ट्री नेविगेशन
उन्नत: बाहरी लिंक्स को ब्राउज़र में खोलें
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// अपने डोमेन के लिंक्स WebView में, बाकी ब्राउज़र में
if (url.startsWith("https://touch.facebook.com/") || url.startsWith("https://m.facebook.com/")) {
view.loadUrl(url);
return true;
} else {
// बाहरी लिंक - ब्राउज़र में खोलें
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
}
ऐप चलाएं
फेसबुक मोबाइल खुलेगा - लिंक क्लिक करने पर उसी WebView में नेविगेट होगा, बैक बटन से वापस जा सकेंगे।
