ссылке - webview android html




Как загрузить заголовок веб-страницы в Android WebView? (4)

Я использую WebView в своем приложении, у меня есть требование изменить название приложения на основе пользователя страницы. Как я могу сделать это в Android WebView?

Я сделал это в iphone, следуя строке

self.title = [webPage stringByEvaluatingJavaScriptFromString:@"document.title"]

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Adds Progrss bar Support
        this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
        setContentView(R.layout.webview );

        // Makes Progress bar Visible
        getWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON); 

        mWebView = (WebView) findViewById( R.id.webview ); //This is the id you gave 
        //to the WebView in the main.xml
        mWebView.getSettings().setJavaScriptEnabled(true);   
        mWebView.getSettings().setSupportZoom(true);       //Zoom Control on web (You don't need this 
        //if ROM supports Multi-Touch      
        mWebView.getSettings().setBuiltInZoomControls(true); //Enable Multitouch if supported by ROM

        // Load URL
        Bundle b = getIntent().getExtras();
        String url = b.getString("url");
        Log.d(TAG, "url " + url);
        mWebView.loadUrl(url);


        // Sets the Chrome Client, and defines the onProgressChanged
        // This makes the Progress bar be updated.
        mWebView.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress){
                //Make the bar disappear after URL is loaded, and changes string to Loading...
                myActivity.setTitle("Loading...");
                myActivity.setProgress(progress * 100); //Make the bar disappear after URL is loaded

                // Return the app name after finish loading
                if(progress == 100)
                    myActivity.setTitle(R.string.app_name);
            }
        });

        mWebView.setWebViewClient(new WebViewClient(){

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

            @Override
            public void onLoadResource(WebView view, String url) {
                // TODO Auto-generated method stub
                super.onLoadResource(view, url);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                ImageView logoImageView = (ImageView)findViewById(R.id.logoimage);
                logoImageView.setVisibility(View.GONE);
                Log.d(TAG, "view.getTitle() " + view.getTitle());
                myActivity.setTitle(view.getTitle());
            }

        });

    }

Для этого вам нужно будет использовать собственный WebViewClient. Вы переопределите метод onPageFinished (), поэтому, когда новая страница завершит загрузку, вы можете установить webview на соответствующий заголовок.

Ниже приведен пример реализации вышеизложенного:

    WebView mWebView = (WebView) findViewById(R.id.mwebview);
    mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            ExperimentingActivity.this.setTitle(view.getTitle());
        }
    });

Вы собираетесь сделать это, когда вы инициализируете свой веб-просмотр. Замените «ExperimentingActivity» на то, что имя вашей деятельности.

Если вы уже переопределяете WebViewClient, просто добавьте эту функцию или код внутри вашей уже существующей функции.

Вы можете получить дополнительную информацию о классах и функциях, которые я использую здесь:

Разработчики Android: Activity - setTitle ()

Разработчики Android: WebViewClient

Разработчики Android: WebView


Мое наблюдение заключается в том, что вы получаете заголовок веб-страницы, используя WebChromeClient в меньшее время, чем использование WebViewClient

webview.setWebChromeClient(new WebChromeClient() {
    @Override
    public void onReceivedTitle(WebView view, String title) {
        super.onReceivedTitle(view, title);
        if (!TextUtils.isEmpty(title)) {
            YourActivity.this.setTitle(title);
        }
    }
});

Что делать, если вам не нужен весь заголовок и просто доменное имя, например, если вы хотите показывать только «Google» на www.google.com, и у вас есть все параметры запроса в этом заголовке.

    URL hostUrl= new URL(webView.getUrl());
    String title = hostUrl.getHost();
    title = title.startsWith("www.") ? title.substring(4) : title;

private WebViewClient mWvClient = new WebViewClient() {

        @Override
        public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {

            String title = view.getTitle();//getTitle
            super.doUpdateVisitedHistory(view, url, isReload);
        }
    }




android-webview