programing

loadurl을 호출할 때 Android 웹 보기가 브라우저를 시작합니다.

telebox 2023. 6. 21. 22:30
반응형

loadurl을 호출할 때 Android 웹 보기가 브라우저를 시작합니다.

다음을 생성했습니다.Activity제목과 웹 뷰를 가지고 있는 것은LinearLayout.에서onResume()호출하는 방법webView.loadUrl(url)문제는 활동이 먼저 화면의 나머지 부분이 비어 있는 제목을 표시한 다음 URL에 대한 페이지와 함께 장치 브라우저가 실행된다는 것입니다.제가 보고 싶은 것은 다음 페이지에 표시되는 것입니다.WebView표제 아래에무엇이 문제일까요?

편집: 네, 검색을 좀 더 해보니 다음과 같습니다.

URL을 클릭하면 기본 브라우저가 열립니다.

그것은 다음을 가리킵니다.WebView자습서 여기 있습니다.

웹 클라이언트를 구현하고 설정하기만 하면 됩니다.

Maudicus와 Hit의 제안을 바탕으로 제 질문에 대답합니다.

여기에서 WebView 자습서를 확인하십시오.웹 클라이언트를 구현하고 loadUrl 전에 설정하기만 하면 됩니다.가장 간단한 방법은 다음과 같습니다.

myWebView.setWebViewClient(new WebViewClient());

웹 콘텐츠에 대한 고급 처리를 위해 ChromeClient를 고려합니다.

사용:

lWebView.setWebViewClient(new WebViewClient());

다음과 같이 사용:

@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");
}

활동을 다음과 같이 만듭니다.

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/");
   }
}

저는 같은 문제에 직면하고 있었고 Android의 WebView에 대한 공식 문서 솔루션을 찾았습니다.

여기 내꺼onCreateView()방법과 여기서 나는 URL을 열기 위해 두 가지 방법을 사용했습니다.

방법 1은 브라우저에서 URL을 열고 있습니다.

방법 2는 원하는 웹 보기에서 URL을 여는 것입니다.
그리고 저는 제 애플리케이션에 Method 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;
}                                                                                               }

이 코드를 사용해 보십시오...

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);
}

페이지가 나타나면 JavaScript를 활성화합니다.

webView.setWebViewClient(new WebViewClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webView.loadUrl(url);

간단히 대답 이렇게 사용할 수 있습니다.

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");
   }
}

webChromeClient를 사용하는 경우 webChromeClient는 shouldOverrideUrlLoading을 제공하지 않으므로 webChromeClient와 webViewClient를 함께 사용하는 것이 좋습니다.둘 다 사용해도 괜찮습니다.

        webview.webViewClient = WebViewClient()
        webview.webChromeClient = Callback()

private inner class Callback : WebChromeClient() {
        override fun onProgressChanged(view: WebView?, newProgress: Int) {
            super.onProgressChanged(view, newProgress)
           
            if (newProgress == 0) {
                progressBar.visibility = View.VISIBLE
            } else if (newProgress == 100) {
                progressBar.visibility = View.GONE
            }
        }

    }

URL 형식에 따라 다르다는 것을 방금 알았습니다.

  • 브라우저에서 https://example.com/example 이 열립니다.
  • webView에서 https://example.com/example/ (마지막에 / 포함)이 열립니다.

내 코드는 그냥 사용합니다.

webview.loadUrl(url)

설정할 필요 없음

webView.setWebViewClient(new WebViewClient())

적어도 내 경우에는.아마 여러분 중 몇몇에게는 유용할 것입니다.

문제는 외부 브라우저를 열지 않고 사이트 간에 전환하기 전에 기록을 삭제해야 한다는 것입니다.

    @Override
    public void onPageFinished(WebView view, String url) {

        webView_.clearHistory();

        super.onPageFinished(webView_, url);
    }

언급URL : https://stackoverflow.com/questions/7746409/android-webview-launches-browser-when-calling-loadurl

반응형