¿Cuál es el método más simple para obtener código html de una vista web? He probado varios métodos de stackoverflow y google, pero no puedo encontrar un método exacto. Por favor mencione una manera exacta.
public class htmldecoder extends Activity implements OnClickListener,TextWatcher
{
TextView txturl;
Button btgo;
WebView wvbrowser;
TextView txtcode;
ImageButton btcode;
LinearLayout llayout;
int flagbtcode;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.htmldecoder);
txturl=(TextView)findViewById(R.id.txturl);
btgo=(Button)findViewById(R.id.btgo);
btgo.setOnClickListener(this);
wvbrowser=(WebView)findViewById(R.id.wvbrowser);
wvbrowser.setWebViewClient(new HelloWebViewClient());
wvbrowser.getSettings().setJavaScriptEnabled(true);
wvbrowser.getSettings().setPluginsEnabled(true);
wvbrowser.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
wvbrowser.addJavascriptInterface(new MyJavaScriptInterface(),"HTMLOUT");
//wvbrowser.loadUrl("http://www.google.com");
wvbrowser.loadUrl("javascript:window.HTMLOUT.showHTML('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");
txtcode=(TextView)findViewById(R.id.txtcode);
txtcode.addTextChangedListener(this);
btcode=(ImageButton)findViewById(R.id.btcode);
btcode.setOnClickListener(this);
}
public void onClick(View v)
{
if(btgo==v)
{
String url=txturl.getText().toString();
if(!txturl.getText().toString().contains("http://"))
{
url="http://"+url;
}
wvbrowser.loadUrl(url);
//wvbrowser.loadData("<html><head></head><body><div style='width:100px;height:100px;border:1px red solid;'></div></body></html>","text/html","utf-8");
}
else if(btcode==v)
{
ViewGroup.LayoutParams params1=wvbrowser.getLayoutParams();
ViewGroup.LayoutParams params2=txtcode.getLayoutParams();
if(flagbtcode==1)
{
params1.height=200;
params2.height=220;
flagbtcode=0;
//txtcode.setText(wvbrowser.getContentDescription());
}
else
{
params1.height=420;
params2.height=0;
flagbtcode=1;
}
wvbrowser.setLayoutParams(params1);
txtcode.setLayoutParams(params2);
}
}
public class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
/*@Override
public void onPageFinished(WebView view, String url)
{
// This call inject JavaScript into the page which just finished loading.
wvbrowser.loadUrl("javascript:window.HTMLOUT.processHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
}*/
}
class MyJavaScriptInterface
{
@SuppressWarnings("unused")
public void showHTML(String html)
{
txtcode.setText(html);
}
}
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
wvbrowser.loadData("<html><div"+txtcode.getText().toString()+"></div></html>","text/html","utf-8");
}
}
android
android-widget
webview
Hope4You
fuente
fuente
webview.loadUrl("javascript:window.HtmlViewer.showHTML" + "('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
el programa actúa como la función terminar () y detiene esa actividad. ¿Por qué? ¿Cómo resolverlo?Uncaught ReferenceError: HtmlViewer is not defined
, sin importar con o sin@JavascriptInterface
En KitKat y
evaluateJavascript
versiones posteriores, puede usar el método en la vista webVea esta respuesta para más ejemplos.
fuente
Para Android 4.2, no olvide agregar @JavascriptInterface a todas las funciones de javasscript
fuente
Android WebView es solo otro motor de renderizado que renderiza contenido HTML descargado de un servidor HTTP, al igual que Chrome o Firefox. No sé la razón por la que necesita obtener la página renderizada (o captura de pantalla) de WebView. Para la mayoría de las situaciones, esto no es necesario. Siempre puede obtener el contenido HTML sin procesar del servidor HTTP directamente.
Ya hay respuestas publicadas que hablan sobre cómo obtener la transmisión sin formato utilizando HttpUrlConnection o HttpClient. Alternativamente, hay una biblioteca muy útil cuando se trata de análisis / proceso de contenido HTML en Android: JSoup , proporciona una API muy simple para obtener contenido HTML del servidor HTTP, y proporciona una representación abstracta del documento HTML para ayudarnos a administrar el análisis HTML. en un estilo más OO pero también mucho más fácil:
Es útil cuando, por ejemplo, desea descargar un documento HTML primero y luego agregar un CSS o JavaScript personalizado antes de pasarlo a WebView para su representación. Mucho más en su sitio web oficial, vale la pena echarle un vistazo.
fuente
Un punto de contacto que encontré que debe ponerse en su lugar está "oculto" en la configuración de Proguard. Si bien el lector HTML invoca a través de la interfaz de JavaScript muy bien al depurar la aplicación, esto ya no funciona tan pronto como la aplicación se ejecutó a través de Proguard, a menos que la función del lector HTML se declare en el archivo de configuración de Proguard, así:
Probado y confirmado en Android 2.3.6, 4.1.1 y 4.2.1.
fuente
Android no te permitirá hacer esto por cuestiones de seguridad. Un desarrollador malvado podría robar fácilmente la información de inicio de sesión ingresada por el usuario.
En su lugar, debe captar el texto que se muestra en la vista web antes de que se muestre. Si no desea configurar un controlador de respuestas (según las otras respuestas), encontré esta solución con algunas búsquedas en Google:
Esto es mucho código, y debería poder copiarlo / pegarlo, y al final
str
contendrá el mismo html dibujado en la vista web. Esta respuesta es de la manera más simple de cargar correctamente html desde la página web en una cadena en Java y también debería funcionar en Android. No he probado esto y no lo escribí yo mismo, pero podría ayudarte.Además, la URL que está extrayendo está codificada, por lo que tendrá que cambiar eso.
fuente
¿Por qué no obtener el html primero y luego pasarlo a la vista web?
Esto debería hacer aproximadamente lo que quieres hacer. Está adaptado de ¿Es posible obtener el código HTML de WebView y gritar a https://stackoverflow.com/users/325081/aymon-fournier por su respuesta.
fuente
Sugeriría que, en lugar de intentar extraer el HTML de WebView, extraiga el HTML de la URL. Con esto, me refiero a usar una biblioteca de terceros como JSoup para atravesar el HTML por usted. El siguiente código obtendrá el HTML de una URL específica para usted
fuente
Es fácil de implementar. Solo necesita métodos javasript en su html para obtener el valor del contenido html. Como arriba de su código, se necesitarán algunos cambios.
Tu Javascript en html
& Asegúrese de llamar callme como se muestra a continuación en html
<input name="FacadeAL" id="FacadeAL" type="text" size="5" onblur="callme()"/>
Espero que esto te ayudará.
fuente
& Make sure you calling callme like below in html
? ¿Querías colocar la etiqueta de entrada debajo del script en el archivo html?Thank You
Thank you very much
Sugiero probar algún enfoque de Reflexión, si tiene tiempo para gastar en el depurador (lo siento, pero no lo hice).
A partir del
loadUrl()
método de laandroid.webkit.WebView
clase:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/webkit/WebView.java#WebView.loadUrl%28java.lang.String % 2Cjava.util.Map% 29
Deberías llegar a
android.webkit.BrowserFrame
esa llamadanativeLoadUrl()
método nativo:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/webkit/BrowserFrame.java#BrowserFrame.nativeLoadUrl%28java.lang.String % 2Cjava.util.Map% 29
La implementación del método nativo debería estar aquí:
http://gitorious.org/0xdroid/external_webkit/blobs/a538f34148bb04aa6ccfbb89dfd5fd784a4208b1/WebKit/android/jni/WebCoreFrameBridge.cpp
¡Te deseo buena suerte!
fuente
intente usar HttpClient como Sephy dijo:
fuente
THANKS
los métodos dados anteriormente son para si tiene una URL web, pero si tiene un html local, entonces también puede tener html por este código
fuente