WebView के अंदर बाहरी वेबपेज कैसे लोड करें


120

मेरी समस्या यह है कि वेबपेज को वेबव्यू के अंदर लोड नहीं किया गया है।

mWebview.loadUrl("http://www.google.com"); वेब ब्राउज़र लॉन्च किया ...

यह मेरी गतिविधि का कोड है:

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

public class Main extends Activity {

    private WebView mWebview;

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

        mWebview = new WebView(this);
        mWebview.loadUrl("http://www.google.com");
        setContentView(mWebview);
    }   
}

मैंने मेनिफेस्ट में आवश्यक अनुमति जोड़ी:

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

Hello Gilbou आपका कोड 2.2 में काम कर रहा है
दीपक केशरिया

लेकिन मेरे साथ नहीं :( न तो एचटीसी वाइल्डफायर पर, न ही एमुलेटर पर ... मुझे अभी समझ में नहीं आया।
गिल्बोउ

1
ठीक है ... अब यह काम करता है। लेकिन यह वेबव्यू के अंदर पेज दिखाने के बजाय वेब ब्राउजर लॉन्च करता है।
गिलबो

नमस्कार, इसका अर्थ है कि यदि UR इस कोड को चलाए तो ब्राउज़र खुला है।
दीपक केशरिया

आपको वास्तव में इस ट्यूटोरियल लिंक की आवश्यकता है एंड्रॉइड वेबव्यू उदाहरण
अथिरा रेड्डी

जवाबों:


224

इस पोस्ट के लिए धन्यवाद , मैं अंत में समाधान मिला। यहाँ कोड है:

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import android.annotation.TargetApi;

public class Main extends Activity {

    private WebView mWebview ;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        mWebview  = new WebView(this);

        mWebview.getSettings().setJavaScriptEnabled(true); // enable javascript

        final Activity activity = this;

        mWebview.setWebViewClient(new WebViewClient() {
            @SuppressWarnings("deprecation")
            @Override
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
            }
            @TargetApi(android.os.Build.VERSION_CODES.M)
            @Override
            public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError rerr) {
                // Redirect to deprecated method, so you can use it in all SDK versions
                onReceivedError(view, rerr.getErrorCode(), rerr.getDescription().toString(), req.getUrl().toString());
            }
        });

        mWebview .loadUrl("http://www.google.com");
        setContentView(mWebview );

    }

}

अच्छी बात है, लेकिन मैं वेब को प्रदर्शित करना चाहता हूं जिसमें पृष्ठ वार होता है। यह वेबव्यू का उपयोग करके संभव है?
ज़ला जनकसिंह

16
अनुमति जोड़ना न भूलें <उपयोग-अनुमति android: name = "android.permission.INTERNET" />
star18bit

2
दरअसल, अपने वेबव्यू के अंदर url को संभालने के लिए आपको एक webviewclient सेट करना चाहिए, यदि आप क्लाइंट सेट नहीं करते हैं, तो डिफ़ॉल्ट व्यवहार एक एप्लिकेशन लॉन्च करना है जो URLs को हैंडल करता है। इस लिंक को
erdemlal

2
जावा स्क्रिप्ट को सक्षम करने से संभावित सुरक्षा समस्याओं के लिए आपका ऐप खुल जाता है और मुझे यकीन है कि android sdk आपको इसके खिलाफ चेतावनी देता है जब आप इसे कोड में उपयोग करते हैं। ऐसा तब तक न करें जब तक आप यह नियंत्रित नहीं कर सकते कि आप अपने वेबव्यू में कौन सी वेबसाइट प्रदर्शित करते हैं और जावा स्क्रिप्ट को सक्षम करना आसान समाधान के रूप में नहीं देखा जाना चाहिए।
लॉस्टप्यूपी

1
यह कोड नहीं खोल रहा है .. दिखा रहा हैWebpage not available
रंजीथ कुमार

44

इसे इस्तेमाल करे

webviewlayout.xml:

<?xml version="1.0" encoding="utf-8"?>
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
         android:id="@+id/help_webview"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:scrollbars="none"
/>

आपकी गतिविधि में:

WebView webView;
setContentView(R.layout.webviewlayout);
webView = (WebView)findViewById(R.id.help_webview);
webView.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("http://www.google.com");

अपडेट करें

webView.setWebViewClient(new WebViewController());अपनी गतिविधि में जोड़ें ।

WebViewController वर्ग:

public class WebViewController extends WebViewClient {

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

1
माफ़ करना। लगता है मैंने प्रकट में कुछ बदल दिया है और अब यह भी काम करता है। लेकिन फिर भी, पृष्ठ वेब ब्राउज़र में लोड किया जाता है, वेबव्यू में नहीं।
गिल्बो

इस लाइन ने मेरे लिए काम किया: webView.getSettings ()। setJavaScriptEnabled (सच);
पिक्सपार्क

1
mWebview.getSettings () setJavaScriptEnabled (सही)। मेरे लिए काम किया, हमें इस लाइन को जोड़ना है
नीना

यह इसे करने का एक बुरा तरीका है। shouldOverrideUrlLoadingवेबव्यू में लोड किए गए सभी पृष्ठों के लिए कहा जाता है। इसमें iFrames शामिल है, जिसका अर्थ है कि यदि पृष्ठ iFrame लोड करता है, तो पृष्ठ को iFrame द्वारा प्रतिस्थापित किया जाएगा। यह प्रासंगिक Android डॉक्स पृष्ठ पर हतोत्साहित किया जाता है।
हैक ५

19
public class WebViewController extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}
webView.setWebViewClient(new WebViewController());

1
मैं अपने वेबव्यू के लिए एक कस्टम webViewClient सेट कर रहा हूं। मेरे कस्टम बनाया WebViewClient में, मैंने अपने url को लोड करने के लिए shouldOverrideUrlLoading विधि को ओवरलोड किया है। मैं इस स्थान के साथ अपना url पास कर रहा हूं: webview.loadUrl ("URL");
राहुल

यह इसे करने का एक बुरा तरीका है। shouldOverrideUrlLoadingवेबव्यू में लोड किए गए सभी पृष्ठों के लिए कहा जाता है। इसमें iFrames शामिल है, जिसका अर्थ है कि यदि पृष्ठ iFrame लोड करता है, तो पृष्ठ को iFrame द्वारा प्रतिस्थापित किया जाएगा। यह प्रासंगिक Android डॉक्स पृष्ठ पर हतोत्साहित किया जाता है।
हैक 5

13

कृपया इस कोड का उपयोग करें: -

Main.Xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:background="@drawable/background">
    <RelativeLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:background="@drawable/top_heading"
        android:id="@+id/rlayout1">
        <TextView android:layout_width="wrap_content"
            android:layout_centerVertical="true" android:layout_centerHorizontal="true"
            android:textColor="#ffffff" android:textSize="22dip"
            android:textStyle="bold" android:layout_height="wrap_content"
            android:text="More Information" android:id="@+id/txtviewfbdisplaytitle" />
    </RelativeLayout>
    <RelativeLayout android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:layout_below="@+id/rlayout1"
        android:id="@+id/rlayout2">
        <WebView android:id="@+id/webview1" android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1.0" />
    </RelativeLayout>
</RelativeLayout>

MainActivity.Java

public class MainActivity extends Activity {
    private class MyWebViewClient extends WebViewClient {
          @Override
          public boolean shouldOverrideUrlLoading(WebView view, String url) {
              view.loadUrl(url);
              return true;
          }
    }
    Button btnBack;
    WebView webview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        webview=(WebView)findViewById(R.id.webview1);
        webview.setWebViewClient(new MyWebViewClient());
        openURL();
    }

     /** Opens the URL in a browser */
    private void openURL() {
        webview.loadUrl("http://www.google.com");
        webview.requestFocus();
    }
}

यदि कोई प्रश्न मुझसे पूछता है तो इस कोड को आज़माएं।


1
यह काम करता हैं। लेकिन आप 2 चीजों से चूक गए। पहला, आपने यह नहीं दिखाया कि इंटरनेट की अनुमति की जरूरत है, दूसरा, पृष्ठभूमि छवि का उपयोग। धन्यवाद
सुमन बप्पी

7

यह बहुत सरल कोशिश है कि कोड की इन पंक्तियों को पहले Android मैनिफ़ेस्ट फ़ाइल में अनुमति दें

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

फिर आप में कुछ कोड लिखें Activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.MainActivity">

<WebView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/help_webview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

/>

</LinearLayout>

फिर इन कोड को अपने MainActivity.java में लिखें

import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Window;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class MainActivity extends Activity{
    private WebView mWebview ;
    String link = "";// global variable
    Resources res;// global variable
    @Override


      protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.activity_modernherbal_main);
            mWebview  = (WebView) findViewById(R.id.help_webview);
            WebSettings webSettings = mWebview.getSettings();
            webSettings.setJavaScriptEnabled(true);
            webSettings.setUseWideViewPort(true);
            webSettings.setLoadWithOverviewMode(true);



        final Activity activity = this;

        mWebview.setWebViewClient(new WebViewClient() {
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
            }


});

    mWebview .loadUrl("http://www.example.com");

}

}

यह कोशिश करें कि यह आपकी समस्या को हल करने में आपकी मदद करेगा


4

बस एक्सएमएल फाइल में जाएं और अपने वेबव्यू को आईडी दें फिर जावा लाइन में ये लाइन डालें:

   public class Main extends Activity {

private WebView mWebview;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.Your_layout_file_name);

    mWebview = (WebView)findViewById(R.id.id_you_gave _to_your_wenview_in_xml);
    mWebview.loadUrl("http://www.google.com");
    }   
}

1

आप ऐसा कर सकते हैं।

webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("Your URL goes here");

1

इसे इस्तेमाल करे;

webView.loadData("<iframe src='http://www.google.com' style='border: 0; width: 100%; height: 100%'></iframe>", "text/html; charset=utf-8", "UTF-8");

1

AndroidManifest.xml में इंटरनेट अनुमति जोड़ें

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

आपके लेआउट में:

<?xml version="1.0" encoding="utf-8"?>
<WebView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/webView"
 />

आपकी गतिविधि में

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    try {
        progressDialog = new ProgressDialog(this);
        url_Api = "https://docs.microsoft.com/en-us/learn";

        webView = this.findViewById(R.id.webView);

            progressDialog.setMessage(getString(R.string.connection_Wait));
            progressDialog.setIndeterminate(false);
            progressDialog.setCancelable(true);
            progressDialog.show();

            LoadUrlWebView( url_Api );
    }catch (Exception e){
        Log.w(TAG, "onCreate", e);
    }
}

private void LoadUrlWebView( String url_api ) {
    try {
        webView.setWebViewClient(new WebViewClient());
        webView.setWebChromeClient(new MyWebChromeClient( url_api ));
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setSupportZoom(true);
        webView.getSettings().setAllowContentAccess(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setDisplayZoomControls(false);

        webView.loadUrl(url_api);
    } catch (Exception e) {
        Log.w(TAG, "setUpNavigationView", e);
    }
}

private class MyWebChromeClient extends WebChromeClient {
    private String urlAccount;

    public MyWebChromeClient( String urlAccount ) {
        this.urlAccount = urlAccount;
    }

    @Override
    public void onProgressChanged(WebView view, int newProgress) {
        try {
            //Tools.LogCat(context, "INSIDE MyWebChromeClient | onProgressChanged / newProgress1:" + newProgress);
            progressDialog.setMessage(newProgress + "% " + getString(R.string.connection_Wait));
            if (newProgress < 100 && !progressDialog.isShowing()) {
                if (progressDialog != null)
                    progressDialog.show();
            }
            if (newProgress == 100) {
                if (progressDialog != null)
                    progressDialog.dismiss();
            }
        }catch (Exception e){
            Log.w( "onProgressChanged", e);
        }
    }

    @Override
    public void onReceivedTitle(WebView view, String title) {
        super.onReceivedTitle(view, title);

        sharedPreferences = new Shared_Preferences( context );
        sharedPreferences.setPageWebView(view.getUrl());
    }

}

1
कृपया अंग्रेजी का उपयोग करें, क्योंकि यह केवल एक अंग्रेजी साइट है। इस मामले में यह केवल 3 पंक्तियाँ हैं जिनका अनुवाद करने की आवश्यकता है।
स्कॉरटे

1

मैंने इस कोड का उपयोग किया जो शांत था। लेकिन एक त्रुटि है। "neterr_cleartext_not_permitted" शो जब आप इस कोड का उपयोग करते हैं तो आपको इस समस्या का सामना करना पड़ेगा ।।

मुझे मिल गया this.you का एक समाधान अपने में यह जोड़ने के लिए AndroidManifest.xml के बारे में पास आवेदन

android:usesCleartextTraffic="true"
<uses-permission android:name="android.permission.INTERNET" /> // ignore if you already added. outside of Application.

1

WebView ग्राहक जोड़ें

mWebView.setWebViewClient(new WebViewClient());

0

आपको WebView ग्राहक जोड़ना होगा

mWebView.setWebViewClient(new WebViewClient() {

   public void onPageFinished(WebView view, String url) {
        // do your stuff here
    }
});

इसके अलावा आप वेब पेज लोडिंग वेब पेज के बाद कार्य करने के लिए onPageFinished का उपयोग कर सकते हैं


-1

अपनी गतिविधि कक्षा में नीचे विधि जोड़ें। आपके ब्राउज़र में कुछ भी नहीं है, लेकिन आपका वेबव्यू ऑब्जेक्ट है।

अब आप वेब में पेज वार को आसानी से देख सकते हैं।

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && browser.canGoBack()) {
        browser.goBack();
        return true;
    }
    return false;
}

यह एंड्रॉइड फोन के निचले भाग में "बैक" बटन के लिए एक कार्यक्षमता जोड़ता है: यह "बैक" ब्राउज़र बटन के रूप में काम करता है।
डॉन लैरिंक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.