Android webview เปิดตัวเบราว์เซอร์เมื่อเรียก loadurl


473

ฉันสร้างที่มีชื่อและดูเว็บในActivity LinearLayoutในวิธีการที่เรียกว่าonResume() webView.loadUrl(url)ปัญหาคือกิจกรรมจะแสดงชื่อเรื่องเป็นส่วนแรกด้วยส่วนที่เหลือของหน้าจอจากนั้นเบราว์เซอร์ของอุปกรณ์จะเปิดขึ้นพร้อมกับหน้าสำหรับ URL สิ่งที่ฉันต้องการเห็นคือหน้าที่แสดงอยู่WebViewใต้ชื่อเรื่อง มีปัญหาอะไร

แก้ไข : ตกลงทำการค้นหาเพิ่มเติมและพบสิ่งนี้:

การคลิก URL จะเป็นการเปิดเบราว์เซอร์เริ่มต้น

มันชี้ไปที่WebViewการกวดวิชาที่นี่

เพียงใช้เว็บไคลเอ็นต์และตั้งค่า


ฉันพูดถึงสิ่งนี้เพราะคุณแก้ไขปัญหาของฉัน ... ขอบคุณ
Jesse Black

2
@ เรย์ลองเขียนคำตอบสำหรับคำถามนี้หากคุณพบวิธีแก้ไขแล้วและยอมรับมัน วิธีนี้จะช่วยให้ผู้อื่นที่มีปัญหาเดียวกัน
HitOdessit

1
ฉันมีปัญหายิ่งขึ้น ปรากฎว่าแม้การเปลี่ยนเส้นทางจะโหลดด้วยเบราว์เซอร์หากไม่ได้ใช้ WebViewClient ที่กำหนดเอง
Jakob Weisblat

ต้องอ่านสิ่งนี้ - WebView เปิดตัวเบราว์เซอร์
Athira Reddy

อันนี้ยังบอกเกี่ยวกับมัน ... youtube.com/watch?v=4bIF5In1c8s
Athira Reddy

คำตอบ:


799

ตอบคำถามของฉันตามคำแนะนำจาก Maudicus และ Hit

ตรวจสอบ WebView กวดวิชาที่นี่ เพียงแค่ใช้เว็บไคลเอ็นต์และตั้ง ก่อน loadUrl วิธีที่ง่ายที่สุดคือ:

myWebView.setWebViewClient(new WebViewClient());

สำหรับการประมวลผลขั้นสูงเพิ่มเติมสำหรับเนื้อหาเว็บให้พิจารณา ChromeClient


3
เพื่อหลีกเลี่ยง WebView เพื่อเปิดเบราว์เซอร์เริ่มต้นเมื่อเปิดหน้าเริ่มต้น
Magno C

23
ขอบคุณสำหรับคาถาชิ้นเล็กชิ้นน้อยที่เหลือเชื่ออย่างไม่น่าเชื่อ! +1 ... ลบหนึ่งสำหรับคุณ Android ...
Josh

คำตอบที่ยอดเยี่ยม แก้ไขปัญหาของฉันด้วย
Omid1989

ใช้งานได้กับการโหลดครั้งแรกเท่านั้นหรือไม่ ถ้าคุณต้องการนำทางเบราว์เซอร์จากภายในแอป
logicbloke

5
myWebView.webViewClient = WebViewClient()ใน Kotlin!
โทมัสพริทชาร์ด

98

ใช้สิ่งนี้:

lWebView.setWebViewClient(new WebViewClient());

@DigvijaySingh ตรวจสอบต้นฉบับของคำตอบที่ยอมรับ เดิมทีมันไม่มีรหัสนี้ มันถูกเพิ่มเข้ามาหลังจากคำตอบนี้
Vladyslav Matviienko

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 ในแอปของคุณ อย่าใช้มันหากคุณไม่ต้องการ JavaScript
apex39

บรรทัดที่เปิดใช้งาน JavaScript มีความสำคัญอย่างยิ่งมิฉะนั้นคุณจะได้รับYou need to enable JavaScript to run this app.และ googling มันจะเปิดเผยเฉพาะคนที่มีปัญหากับการตอบสนองพื้นเมืองและคุณจะบ้าเพราะ JavaScript เปิดใช้งานแล้วในการตั้งค่าเบราว์เซอร์
Jordan H

19

ฉันพบปัญหาเดียวกันและพบวิธีแก้ไขปัญหา เอกสารทางการของ Android เกี่ยวกับ WebView

นี่คือonCreateView()วิธีการของฉันและที่นี่ฉันใช้สองวิธีในการเปิด URL

วิธีที่ 1เปิด url ในเบราว์เซอร์และ

วิธีที่ 2เปิด url ใน WebView ที่คุณต้องการ
และฉันใช้วิธีที่ 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);
}

1

หากคุณเห็นหน้าว่างให้เปิดใช้งาน JavaScript

webView.setWebViewClient(new WebViewClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webView.loadUrl(url);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.