কিভাবে ওয়েবভিউয়ের অভ্যন্তরে বাহ্যিক ওয়েবপৃষ্ঠা লোড করা যায়


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" />

হ্যালো গিলবা আপনার কোডটি ২.২
দিপক কেশরিয়া

কিন্তু আমার সাথে :( আমরাও এইচটিসি আলেয়া উপর, তন্ন তন্ন এমুলেটর উপর ... আমি ঠিক বুঝতে পারছিলাম না।
Gilbou

1
ঠিক আছে ... এখন এটি কাজ করে। তবে এটি ওয়েব ভিউয়ের ভিতরে পৃষ্ঠাটি প্রদর্শন করার পরিবর্তে ওয়েব ব্রাউজারটি চালু করে।
গিলবো

হ্যালো, এর অর্থ যদি ইউআর এই কোডটি চালায় তবে ব্রাউজারটি খোলা আছে।
দীপক কেশরিয়া

উত্তর:


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.permission.INTERNET" />
তারকা

2
আসলে, আপনার ওয়েবভিউয়ের ভিতরে ইউআরএলটি হ্যান্ডল করার জন্য আপনাকে একটি ওয়েবভিউক্লিয়েন্ট সেট করা উচিত, যদি আপনি কোনও ক্লায়েন্ট সেট না করেন তবে ডিফল্ট আচরণটি এমন একটি অ্যাপ্লিকেশন চালু করে যা ইউআরএলগুলি পরিচালনা করে। এই লিঙ্কটি
এরডেমালাল

2
জাভা স্ক্রিপ্ট সক্ষম করা আপনার অ্যাপ্লিকেশনটিকে সম্ভাব্য সুরক্ষার সমস্যার জন্য উন্মুক্ত করে দেয় এবং আমি নিশ্চিত যে অ্যান্ড্রয়েড এসডিকে আপনি কোডে ব্যবহার করার সময় এর বিরুদ্ধে আপনাকে সতর্ক করে দেবেন। আপনি যদি আপনার ওয়েবভিউতে প্রদর্শিত ওয়েবসাইটগুলি নিয়ন্ত্রণ করতে না পারেন এবং জাভা স্ক্রিপ্ট সক্ষম করে তোলেন তবে সহজে সমাধান হিসাবে দেখা যাবেনা unless
লস্টপুপি

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());আপনার কার্যকলাপ করতে।

ওয়েবভিউ নিয়ন্ত্রণকারী শ্রেণি:

public class WebViewController extends WebViewClient {

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

1
দুঃখিত। মনে হচ্ছে আমি ম্যানিফেস্টে কিছু পরিবর্তন করেছি এবং এখন এটিও কার্যকর হয়। তবে এখনও, পৃষ্ঠাটি ওয়েব ব্রাউজারে লোড করা হয়, ওয়েব ভিউতে নয়।
গিলবাউ

এই লাইনটি আমার জন্য কাজ করেছে: ওয়েবভিউ.সেটসেটেটিংস ()। সেটজভাস্ক্রিপ্টএনেবল (সত্য);
pixparker

1
mWebview.getSettings () setJavaScriptEnabled (সত্য)। আমার জন্য কাজ করেছেন, আমাদের এই লাইনটি যুক্ত করতে হবে
নীনা

এটি এটি করার একটি খারাপ উপায়। shouldOverrideUrlLoadingওয়েবভিউতে লোড হওয়া সমস্ত পৃষ্ঠার জন্য ডাকা হয়। এটিতে আইফ্রেমস অন্তর্ভুক্ত রয়েছে, অর্থাত্ পৃষ্ঠাটি যদি একটি আইফ্রেম লোড করে, পৃষ্ঠাটি আইফ্রেম দ্বারা প্রতিস্থাপন করা হবে। এটি সম্পর্কিত অ্যান্ড্রয়েড ডক্স পৃষ্ঠায় নিরুৎসাহিত করা হয়।
হ্যাক 5

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

1
আমি আমার ওয়েবভিউতে একটি কাস্টম ওয়েবভিউক্লিয়েন্ট সেট করছি। আমার কাস্টম তৈরি ওয়েবভিউক্লিয়েন্টে, আমি আমার ইউআরএল লোড করার জন্য কাঁধ ওভাররাইডআরললোডিং পদ্ধতিটি ওভারলোড করেছি। আমি এই ইউআরএলটি এই লোকের সাথে দিয়ে যাচ্ছি: webview.loadUrl ("URL");
রাহুল

এটি এটি করার একটি খারাপ উপায়। shouldOverrideUrlLoadingওয়েবভিউতে লোড হওয়া সমস্ত পৃষ্ঠার জন্য ডাকা হয়। এটিতে আইফ্রেমস অন্তর্ভুক্ত রয়েছে, অর্থাত্ পৃষ্ঠাটি যদি একটি আইফ্রেম লোড করে, পৃষ্ঠাটি আইফ্রেম দ্বারা প্রতিস্থাপন করা হবে। এটি সম্পর্কিত অ্যান্ড্রয়েড ডক্স পৃষ্ঠায় নিরুৎসাহিত করা হয়।
হ্যাক 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
এটা কাজ করে। তবে আপনি দুটি জিনিস মিস করেছেন। প্রথমত, আপনি ইন্টারনেটের অনুমতি প্রয়োজন দেখায় নি, দ্বিতীয়ত, ব্যাকগ্রাউন্ড চিত্র ব্যবহার। ধন্যবাদ
সুমন বাপ্পি

7

কোডগুলির এই লাইনগুলিকে একীভূত করা খুব সহজ চেষ্টা করুন প্রথমে Android ম্যানিফেস্ট ফাইলে অনুমতি নিন take

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

তারপরে আপনার মেইনএকটিভিটি.জভাতে এই কোডগুলি লিখুন

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

AndroidManLive.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 একটি সমাধান আপনার এই যোগ আছে Andro আইডি সম্পর্কে কাছাকাছি আবেদন

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

1

ওয়েবভিউ ক্লায়েন্ট যুক্ত করুন

mWebView.setWebViewClient(new WebViewClient());

0

আপনাকে ওয়েবভিউ ক্লায়েন্ট যুক্ত করতে হবে

mWebView.setWebViewClient(new WebViewClient() {

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

এছাড়াও আপনি ওয়েবপৃষ্ঠাটি ওয়েব পৃষ্ঠায় লোড করার পরে পেজফিনিশড অন টাস্কটি করতে ব্যবহার করতে পারেন


-1

আপনার ক্রিয়াকলাপে নীচের পদ্ধতিটি যুক্ত করুন e এখানে ব্রাউজারটি আপনার ওয়েবভিউ অবজেক্ট ছাড়া কিছুই নয় nothing

এখন আপনি সহজেই ওয়েব যুক্ত পৃষ্ঠাটি দেখতে পারেন।

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

এটি অ্যান্ড্রয়েড ফোনের নীচে "পিছনে" বোতামটিতে একটি কার্যকারিতা যুক্ত করে: এটি "পিছনে" ব্রাউজার বোতাম হিসাবে কাজ করে।
ডন ল্যারিনেক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.