एंड्रॉइड वेबव्यू लोडुरल कॉल करते समय ब्राउज़र लॉन्च करता है


473

मैंने Activityएक शीर्षक बनाया और एक में एक वेब दृश्य है LinearLayout। में onResume()विधि यह कहता है webView.loadUrl(url)। समस्या यह है कि गतिविधि पहले स्क्रीन के बाकी हिस्सों के साथ शीर्षक दिखाती है, फिर डिवाइस ब्राउज़र को URL के लिए पृष्ठ के साथ लॉन्च किया जाता है। मैं जो देखना चाहता हूं, वह पृष्ठ WebViewनीचे शीर्षक में दिखाया जा रहा है । क्या समस्या हो सकती है?

संपादित करें : ठीक है, कुछ और खोज की और यह पाया:

URL पर क्लिक करने से डिफ़ॉल्ट ब्राउज़र खुल जाता है

यह यहाँWebView ट्यूटोरियल की ओर इशारा करता है

बस वेब क्लाइंट को लागू करें और इसे सेट करें।


मैं इसका उल्लेख करता हूं क्योंकि आपने मेरी समस्या को हल किया ... धन्यवाद।
जेसी ब्लैक

2
@ राय, इस प्रश्न का उत्तर लिखने पर विचार करें, यदि आपने कोई हल ढूंढ लिया है, और उसे स्वीकार करें। इससे अन्य लोगों को भी यही समस्या होगी।
हिटऑडेसिट

1
मैं एक भी nastier समस्या थी। यह पता चलता है, यहां तक ​​कि एक पुनर्निर्देशित ब्राउज़र के साथ लोड होगा अगर एक कस्टम WebViewClient का उपयोग नहीं किया जाता है।
जैकब वीसब्लाट


यह भी इसके बारे में बताता है ... youtube.com/watch?v=4bIF5In1c8s
अथिरा रेड्डी

जवाबों:


798

मौडिकस और हिट के सुझावों के आधार पर मेरे प्रश्न का उत्तर देना।

यहां WebView ट्यूटोरियल देखें । बस वेब क्लाइंट को लागू करें और लोड होने से पहले इसे सेट करें । सबसे सरल तरीका है:

myWebView.setWebViewClient(new WebViewClient());

वेब सामग्री के लिए अधिक उन्नत प्रसंस्करण के लिए, ChromeClient पर विचार करें।


3
प्रारंभिक पृष्ठ खोलने पर डिफ़ॉल्ट ब्राउज़र लॉन्च करने के लिए WebView से बचने के लिए।
मैग्नो C

23
जादू टोने के इस अविश्वसनीय भयानक छोटे टुकड़े के लिए धन्यवाद! +1 ... आपके लिए एक, Android ...
जोश

बहुत बढ़िया जवाब। मेरी समस्या का समाधान भी किया।
ओमिड १

क्या यह केवल शुरुआती लोडिंग के लिए काम करता है? क्या होगा यदि आप ऐप के भीतर से ब्राउज़र को नेविगेट करना चाहते हैं?
लॉजिकब्लॉक

5
myWebView.webViewClient = WebViewClient()कोटलिन में!
थॉमस प्रिचर्ड


52

इस तरह का उपयोग करें:

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

    WebView myWebView = (WebView) findViewById(R.id.webView1);
    myWebView.setWebViewClient(new WebViewClient());
    myWebView.loadUrl("https://google.com");
}

25

अपनी गतिविधि को इस तरह बनाएं।

public class MainActivity extends Activity {
WebView browser;

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

    // find the WebView by name in the main.xml of step 2
    browser=(WebView)findViewById(R.id.wvwMain);

    // Enable javascript
    browser.getSettings().setJavaScriptEnabled(true);  

    // Set WebView client
    browser.setWebChromeClient(new WebChromeClient());

    browser.setWebViewClient(new WebViewClient() {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
                }
        });
     // Load the webpage
    browser.loadUrl("http://google.com/");
   }
}

1
setJavaScriptEnabled(true)आपके ऐप में XSS भेद्यता का परिचय देता है। यदि आपको जावास्क्रिप्ट की आवश्यकता नहीं है, तो इसका उपयोग न करें
apex39

जावास्क्रिप्ट को सक्षम करने वाली रेखा सुपर महत्वपूर्ण है अन्यथा आप प्राप्त करेंगे You need to enable JavaScript to run this app.और इसे googling करेंगे, यह केवल उन लोगों को प्रकट करेगा जिनके पास प्रतिक्रिया के साथ समस्याएँ हैं और आप पागल हो जाएंगे क्योंकि जावास्क्रिप्ट पहले से ही ब्राउज़र सेटिंग्स में सक्षम है।
जॉर्डन एच

19

मैं उसी समस्या का सामना कर रहा था और मुझे वेबव्यू के बारे में समाधान एंड्रॉइड का आधिकारिक दस्तावेज मिला

यहाँ मेरी onCreateView()विधि है और यहाँ मैंने url खोलने के लिए दो विधियों का उपयोग किया है

विधि 1 ब्राउज़र में url खोल रहा है और

Method 2 आपके वांछित WebView में url खोल रहा है।
और मैं अपने आवेदन के लिए विधि 2 का उपयोग कर रहा हूं और यह मेरा कोड है:

public class MainActivity extends Activity {
   private WebView myWebView;

     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

      View rootView = inflater.inflate(R.layout.fragment_webpage_detail, container, false);

      // Show the dummy content as text in a TextView.
      if (mItem != null) {

         /* Method : 1
          This following line is working fine BUT when we click the menu item then it opens the URL in BROWSER not in WebView */
         //((WebView)   rootView.findViewById(R.id.detail_area)).loadUrl(mItem.url);

        // Method : 2
        myWebView = (WebView) rootView.findViewById(R.id.detail_area); // get your WebView form your xml file
        myWebView.setWebViewClient(new WebViewClient()); // set the WebViewClient
        myWebView.loadUrl(mItem.url); // Load your desired url
    }

    return rootView;
}                                                                                               }

6

बस जवाब आप इस तरह का उपयोग कर सकते हैं

public class MainActivity extends AppCompatActivity {

     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         WebView webView = new WebView(this);
         setContentView(webView);
         webView.setWebViewClient(new WebViewClient());
         webView.loadUrl("http://www.google.com");
   }
}

6

इस कोड को आज़माएं ...

private void startWebView(String url) {

    //Create new webview Client to show progress dialog
    //When opening a url or click on link

    webView.setWebViewClient(new WebViewClient() {      
        ProgressDialog progressDialog;

        //If you will not use this method url links are opeen in new brower not in webview
        public boolean shouldOverrideUrlLoading(WebView view, String url) {              
            view.loadUrl(url);
            return true;
        }

        //Show loader on url load
        public void onLoadResource (final WebView view, String url) {
            if (progressDialog == null) {
                // in standard case YourActivity.this
                progressDialog = new ProgressDialog(view.getContext());
                progressDialog.setMessage("Loading...");
                progressDialog.show();
            }
        }
        public void onPageFinished(WebView view, String url) {
            try{
            if (progressDialog.isShowing()) {
                progressDialog.dismiss();
                progressDialog = null;
            }
            }catch(Exception exception){
                exception.printStackTrace();
            }
        }

    }); 

     // Javascript inabled on webview  
    webView.getSettings().setJavaScriptEnabled(true); 

    // Other webview options
    /*
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    webView.setScrollbarFadingEnabled(false);
    webView.getSettings().setBuiltInZoomControls(true);
    */

    /*
     String summary = "<html><body>You scored <b>192</b> points.</body></html>";
     webview.loadData(summary, "text/html", null); 
     */

    //Load url in webview
    webView.loadUrl(url);
}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.