>  기사  >  웹 프론트엔드  >  WebView에 표시된 웹사이트의 모양을 수정하는 방법은 무엇입니까?

WebView에 표시된 웹사이트의 모양을 수정하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-30 01:58:28959검색

How to Modify the Appearance of a Website Displayed in a WebView?

WebView에 표시된 웹사이트에 CSS 삽입

문제:

웹사이트의 모양을 수정해야 합니다. WebView에 표시됩니다(예: www.google.com의 배경색을 빨간색으로 변경). 자산 폴더의 style.css 파일을 www.google.com에 삽입하려는 시도가 실패했습니다.

해결책:

다음에 표시된 웹사이트에 CSS를 직접 삽입하는 것은 불가능합니다. 웹뷰. 대신 JavaScript를 사용하여 페이지의 DOM(문서 개체 모델)을 조작할 수 있습니다.

다음은 CSS 삽입을 위해 수정된 코드입니다.

<code class="java">public class MainActivity extends ActionBarActivity {

  WebView webView;

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

    webView = new WebView(this);
    setContentView(webView);

    // Enable Javascript
    webView.getSettings().setJavaScriptEnabled(true);

    // Add a WebViewClient
    webView.setWebViewClient(new WebViewClient() {

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

            // Inject CSS when page is done loading
            injectCSS();
            super.onPageFinished(view, url);
        }
    });

    // Load a webpage
    webView.loadUrl("https://www.google.com");
  }

  // Inject CSS method: read style.css from assets folder
  // Append stylesheet to document head
  private void injectCSS() {
    try {
        InputStream inputStream = getAssets().open("style.css");
        byte[] buffer = new byte[inputStream.available()];
        inputStream.read(buffer);
        inputStream.close();
        String encoded = Base64.encodeToString(buffer, Base64.NO_WRAP);
        webView.loadUrl("javascript:(function() {" +
                "var parent = document.getElementsByTagName('head').item(0);" +
                "var style = document.createElement('style');" +
                "style.type = 'text/css';" +
                // Tell the browser to BASE64-decode the string into your script !!!
                "style.innerHTML = window.atob('" + encoded + "');" +
                "parent.appendChild(style)" +
                "})()");
    } catch (Exception e) {
        e.printStackTrace();
    }
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
  }
}</code>

설명:

  1. WebView에서 JavaScript를 활성화합니다.
  2. 페이지 로드가 완료되는 시점을 모니터링하기 위해 WebViewClient를 추가합니다.
  3. style.css 파일을 읽는 injectCSS() 메서드를 정의합니다. 자산 폴더에서 Base64를 사용하여 인코딩하고 JavaScript를 사용하여 문서 헤드에 삽입합니다.
  4. 페이지 로드가 완료되면 injectCSS()를 호출합니다.

이 접근 방식은 JavaScript를 사용합니다. WebView에 표시된 웹사이트의 DOM을 수정하여 CSS 스타일을 페이지에 효과적으로 삽입할 수 있습니다.

위 내용은 WebView에 표시된 웹사이트의 모양을 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.