2010-02-08 30 views
33

Supponiamo di caricare un URL di terze parti tramite webview.In Android Webview, posso modificare il DOM di una pagina web?

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     webview = (WebView) findViewById(R.id.webview); 
     webview.setWebViewClient(new HelloWebViewClient()); 
     webview.getSettings().setJavaScriptEnabled(true); 
     webview.setWebChromeClient(new MyWebChromeClient()); 
     webview.loadUrl("http://ebay.com");   
    } 

E 'possibile per me iniettare qualcosa in questo WebView per sostituire il logo di eBay con la mia?

+2

Sostituire il logo di qualcun altro con il tuo sembra una pessima idea. – titaniumdecoy

+0

È solo un esempio di ciò che la Webview può e non può fare. In realtà voglio rimuovere tutti i tag da quel sito di terze parti, Linkedin (dal momento che quel sito ha un bug). – TIMEX

+50

È questo PoliceOverflow o StackOverflow? –

risposta

11

Non direttamente. Puoi invocare il codice Javascript nel contesto della pagina Web corrente, tramite loadUrl(), proprio come fa un bookmarklet. Tuttavia, non hai accesso diretto al DOM dal codice Java.

+0

Sebbene la parte di accesso diretto sia vera, c'è un accesso indiretto completo a Dom, usando javaScriptBridge basta passare l'intero Html e si ha l'intera pagina. Questa pagina può quindi essere modificata in qualsiasi modo tramite manipolazioni di stringhe e ricaricata nuovamente in webview. – PSIXO

41

Per espandere sulla risposta corretta di CommonsWare:

WebView webview = new WebView(); 
webview.setWebViewClient(new WebClient()); 
webView.getSettings().setJavaScriptEnabled(true); 
webview.loadUrl("stackoverflow.com"); 

poi nel WebClient:

public class WebClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 
     return true; 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) 
    {  
     // Obvious next step is: document.forms[0].submit() 
     view.loadUrl("javascript:document.forms[0].q.value='[android]'");  
    } 
} 

In poche parole, si attende per la pagina da caricare. Quindi carichi URL ("javascript: [your javascript here"]).

+1

Assicurati di impostare javascript abilitato su true nella tua webview o perderai un sacco di tempo cercando di eseguire il debug di questo tipo. – AdamMc331

+0

Perché è necessario eseguire l'override di shouldOverrideUrlLoading? –

-16
WebView webview = new WebView(); 

//Maybe need to set to enabled javascript? 
webView.getSettings().setJavaScriptEnabled(true); 

webview.setWebViewClient(new WebClient()); 

webview.loadUrl("stackoverflow.com"); 
+1

Guarda con attenzione alla domanda. – naXa

+0

Questo non ha nulla a che fare con la domanda. – PSIXO

+1

Guarda con attenzione alla domanda. – Oli

Problemi correlati