Autore Topic: WebView - Visualizzare parte della pagina HTML  (Letto 1378 volte)

Offline Fenex86

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: 0
    • Google+
    • davide-vallicella/43/325/74
    • Mostra profilo
    • Libretto universitario
  • Dispositivo Android:
    Emulatore - 2.3
  • Sistema operativo:
    W7 - Kubuntu 11.10
WebView - Visualizzare parte della pagina HTML
« il: 24 Aprile 2012, 12:07:27 CEST »
0
Salve a tutti,

il mio problema in sostanza è già descritto nell'oggetto, voglio caricare una pagina HTML ma ne voglio visualizzare solo una parte, ovvero voglio togliere tutto quello che non mi interessa (immagini barre laterali header footer  ecc..)

grazie.

Offline pivoide

  • Utente junior
  • **
  • Post: 133
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy tab 10.1
  • Play Store ID:
    codicerosso
  • Sistema operativo:
    Ubuntu 11.04
Re:WebView - Visualizzare parte della pagina HTML
« Risposta #1 il: 24 Aprile 2012, 12:33:57 CEST »
0
A naso ti serve un parser: http://htmlparser.sourceforge.net/
Odio l'inglese e per un informatico non è il massimo

Offline Fenex86

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: 0
    • Google+
    • davide-vallicella/43/325/74
    • Mostra profilo
    • Libretto universitario
  • Dispositivo Android:
    Emulatore - 2.3
  • Sistema operativo:
    W7 - Kubuntu 11.10
Re:WebView - Visualizzare parte della pagina HTML
« Risposta #2 il: 24 Aprile 2012, 12:44:09 CEST »
0
Si la parte parser l'ho gia fatta anzi avrei anche risolto in questo modo:
Codice (Java): [Seleziona]
package com.juliasoft.libretto.activity;

import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.http.cookie.Cookie;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import com.juliasoft.libretto.connection.ConnectionManager;
import com.juliasoft.libretto.connection.SsolHttpClient;

public class Questionario extends Activity {

        String url;
        WebView webView;
        String questionario;
        final Activity activity = this;
        ConnectionManager cm = ConnectionManager.getInstance();

        public boolean update = true;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.questionario);
                // this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
                webView = (WebView) findViewById(R.id.sito);
                setUpWebView();

                webView.requestFocus(View.FOCUS_DOWN);
                webView.setOnTouchListener(new View.OnTouchListener() {
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                                switch (event.getAction()) {
                                case MotionEvent.ACTION_DOWN:
                                case MotionEvent.ACTION_UP:
                                        if (!v.hasFocus()) {
                                                v.requestFocus();
                                        }
                                        break;
                                }
                                return false;
                        }
                });

                webView.loadUrl("https://www.ssol.univr.it/main?ent=compilazionequestionario&lang=it&id_appello=248977&id_prova=142900&azione=INSERT");

        }

        private void setUpWebView() {
                // use cookies to remember a logged in status
                List<Cookie> cookies = cm.getSSOLCookies();

                if (!cookies.isEmpty()) {

                        CookieSyncManager.createInstance(this);
                        CookieManager cookieManager = CookieManager.getInstance();

                        // sync all the cookies in the httpclient with the webview by
                        // generating cookie string
                        for (Cookie cookie : cookies) {

                                Cookie sessionInfo = cookie;

                                String cookieString = sessionInfo.getName() + "="
                                                + sessionInfo.getValue() + "; domain="
                                                + sessionInfo.getDomain();
                                cookieManager.setCookie(SsolHttpClient.AUTH_URI, cookieString);
                                CookieSyncManager.getInstance().sync();
                                System.out.println((cookie.isSecure() ? "https" : "http") + "://" + cookie.getDomain() + cookie.getPath());
                        }
                }
                WebSettings webSettings = webView.getSettings();
                webSettings.setJavaScriptEnabled(true);
                webView.setWebViewClient(new MyClient());
                webView.addJavascriptInterface(new QuestionarioJSInterface(), "droid");
        }
       
        public void loadQuestionario(){
                webView.loadDataWithBaseURL("https://www.ssol.univr.it/",
                                questionario, "text/html", "UTF-8", null);
        }

        class MyClient extends WebViewClient {

                String data = "";

                @Override
                public void onPageStarted(WebView view, String url, Bitmap favicon) {
                        System.out.println("Start");
                        super.onPageStarted(view, url, favicon);
                }

                @Override
                public void onPageFinished(WebView view, String url) {
                        System.out.println("Finish");
                        super.onPageFinished(view, url);
                        if (update) {
                                String ht = "javascript:window.droid.print(document.getElementsByTagName('html')[0].innerHTML);";
                                webView.loadUrl(ht);
                        } else
                                update = true;
                }

                @Override
                public void onReceivedError(WebView view, int errorCode,
                                String description, String failingUrl) {
                        // Handle the error
                        System.out.println("Error");
                }

                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url_poi) {
                        System.out.println("Loading");
                        view.loadUrl(url_poi);
                        return true;
                }
        }

        class QuestionarioJSInterface {
                public void print(String data) {
                        if (data.contains("<script type=\"text/javascript\">")) {
                                if (!update)
                                        return;
                                questionario = "<html>" + data + "</html>";
                                Pattern pattern = Pattern.compile(
                                                "^<body>(.*?)<script type=\"text/javascript\">$",
                                                Pattern.MULTILINE | Pattern.DOTALL);
                                Matcher matcher = pattern.matcher(questionario);
                                StringBuffer sb = new StringBuffer();
                                if (matcher.find()) {
                                        System.out.println("ok------");
                                        matcher.appendReplacement(sb,
                                                        "<body><script type=\"text/javascript\">");
                                }
                                matcher.appendTail(sb);
                                System.out.println("3");
                                questionario = sb.toString();
                                System.out.println("4");
                                update = false;
                                loadQuestionario();
                        }
                }
        }
}

Come vedi dopo aver caricato la pagina effettuo un nuovo loadUrl dove eseguo del codice javascript che effettua il parser ma non penso sia il modo più efficiente di procedere..

Offline pivoide

  • Utente junior
  • **
  • Post: 133
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy tab 10.1
  • Play Store ID:
    codicerosso
  • Sistema operativo:
    Ubuntu 11.04
Re:WebView - Visualizzare parte della pagina HTML
« Risposta #3 il: 24 Aprile 2012, 13:12:39 CEST »
0
Io (non sono esperto di webview) dopo il caricamento preleverei tutto il testo, ci aggiungerei il mio java script e aprirei una webview direttamente con la stringa risultante evitando di ricaricare dalla url.
Odio l'inglese e per un informatico non è il massimo

Offline Fenex86

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: 0
    • Google+
    • davide-vallicella/43/325/74
    • Mostra profilo
    • Libretto universitario
  • Dispositivo Android:
    Emulatore - 2.3
  • Sistema operativo:
    W7 - Kubuntu 11.10
Re:WebView - Visualizzare parte della pagina HTML
« Risposta #4 il: 24 Aprile 2012, 14:07:00 CEST »
0
mi andrebbe bene anche questo sistema l'unica cosa che vorrei evitare è il caricamento doppio della stessa pagina ovvero mi visualizza la pagina originale e poi dopo pochi secondi la pagina che ho modificato quella corretta io vorrei visualizzare direttamente la seconda quindi non ci sarebbe un sistema di fare una loadData/loadUrl baipassando la visualizzazione a video?

Offline pivoide

  • Utente junior
  • **
  • Post: 133
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy tab 10.1
  • Play Store ID:
    codicerosso
  • Sistema operativo:
    Ubuntu 11.04
Re:WebView - Visualizzare parte della pagina HTML
« Risposta #5 il: 24 Aprile 2012, 17:05:17 CEST »
0
Leggi la pagina con un flusso senza usare la webview. Dovrebbe essere qualcosa come:
Codice (Java): [Seleziona]
            DefaultHttpClient client = new DefaultHttpClient();
            HttpGet request = new HttpGet("tuaurl");
            HttpResponse response = client.execute(request);    
            BufferedReader in = new BufferedReader (new InputStreamReader(response.getEntity().getContent()));
            StringBuffer sb = new StringBuffer();
            String line = "";
            while ((line = in.readLine()) != null) {
                sb.append(line);
            }
            in.close();
            String html=sb.toString();
}
Odio l'inglese e per un informatico non è il massimo

Offline Fenex86

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: 0
    • Google+
    • davide-vallicella/43/325/74
    • Mostra profilo
    • Libretto universitario
  • Dispositivo Android:
    Emulatore - 2.3
  • Sistema operativo:
    W7 - Kubuntu 11.10
Re:WebView - Visualizzare parte della pagina HTML
« Risposta #6 il: 24 Aprile 2012, 22:10:35 CEST »
0
Ho risolto nascondendo il browser durante la visualizzazione della pagina non "parsata" tramite una viewswitcher.