Qual é o método mais simples de obter código html em uma visualização na web? Eu tentei vários métodos de stackoverflow e google, mas não consigo encontrar um método exato. Por favor mencione uma maneira exata.
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
fonte
fonte
webview.loadUrl("javascript:window.HtmlViewer.showHTML" + "('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
o programa age como a função finish () e interrompe essa atividade. por que? como resolvê-lo?Uncaught ReferenceError: HtmlViewer is not defined
, não importa com ou sem@JavascriptInterface
No KitKat e acima, você pode usar o
evaluateJavascript
método na visualização na webVeja esta resposta para mais exemplos
fonte
Para o Android 4.2, não se esqueça de adicionar @JavascriptInterface em todas as funções javasscript
fonte
O Android WebView é apenas outro mecanismo de renderização que renderiza o conteúdo HTML baixado de um servidor HTTP, como o Chrome ou o FireFox. Não sei o motivo pelo qual você precisa obter a página renderizada (ou captura de tela) do WebView. Para a maioria das situações, isso não é necessário. Você sempre pode obter o conteúdo HTML bruto do servidor HTTP diretamente.
Já existem respostas postadas falando sobre como obter o fluxo bruto usando HttpUrlConnection ou HttpClient. Como alternativa, existe uma biblioteca muito útil ao lidar com a análise / processo de conteúdo HTML no Android: JSoup , ela fornece uma API muito simples para obter conteúdo HTML do servidor HTTP e fornece uma representação abstrata do documento HTML para nos ajudar a gerenciar a análise HTML não apenas em um estilo mais OO, mas também com muita facilidade:
É útil quando, por exemplo, você deseja fazer o download do documento HTML primeiro e depois adicionar algum CSS ou javascript personalizado antes de passá-lo ao WebView para renderização. Muito mais em seu site oficial, vale a pena conferir.
fonte
Um ponto de contato que eu descobri que precisa ser colocado no lugar é "escondido" na configuração do Proguard. Enquanto o leitor HTML chama pela interface javascript muito bem ao depurar o aplicativo, isso não funciona mais assim que o aplicativo foi executado através do Proguard, a menos que a função do leitor HTML seja declarada no arquivo de configuração Proguard, da seguinte maneira:
Testado e confirmado no Android 2.3.6, 4.1.1 e 4.2.1.
fonte
O Android não permitirá que você faça isso por questões de segurança. Um desenvolvedor malvado pode facilmente roubar informações de login inseridas pelo usuário.
Em vez disso, você deve capturar o texto que está sendo exibido na webview antes de ser exibido. Se você não deseja configurar um manipulador de respostas (conforme as outras respostas), eu encontrei essa correção com algumas pesquisas:
Isso é muito código, e você deve poder copiá-lo / alterá-lo e, no final,
str
conterá o mesmo html desenhado na visualização na web. Esta resposta é da maneira mais simples de carregar corretamente html da página da web em uma string em Java e deve funcionar no Android também. Eu não testei isso e não o escrevi, mas isso pode ajudá-lo.Além disso, o URL que está puxando é codificado permanentemente, então você terá que mudar isso.
fonte
Por que não obter o html primeiro e depois passá-lo para a visualização na web?
Isso deve fazer aproximadamente o que você quer fazer. É adaptado de É possível obter o código HTML do WebView e gritar para https://stackoverflow.com/users/325081/aymon-fournier por sua resposta.
fonte
Sugiro que, em vez de tentar extrair o HTML do WebView, você extraia o HTML da URL. Com isso, quero dizer usando uma biblioteca de terceiros, como JSoup, para percorrer o HTML para você. O código a seguir obterá o HTML de um URL específico para você
fonte
É simples de implementar. Só precisa de métodos javasript no seu html para obter valor do conteúdo html. Como acima do seu código, algumas alterações serão necessárias.
Seu Javascript em html
& Certifique-se de ligar para o callme como abaixo em html
<input name="FacadeAL" id="FacadeAL" type="text" size="5" onblur="callme()"/>
Espero que isso ajude você.
fonte
& Make sure you calling callme like below in html
. Você quis colocar a tag de entrada abaixo do script no arquivo html?Thank You
Thank you very much
Sugiro tentar uma abordagem de reflexão, se você tiver tempo para gastar no depurador (desculpe, mas eu não tinha).
A partir do
loadUrl()
método daandroid.webkit.WebView
classe: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
Você deve chegar ao
android.webkit.BrowserFrame
que chama onativeLoadUrl()
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
A implementação do método nativo deve estar aqui:
http://gitorious.org/0xdroid/external_webkit/blobs/a538f34148bb04aa6ccfbb89dfd5fd784a4208b1/WebKit/android/jni/WebCoreFrameBridge.cpp
Desejo boa sorte!
fonte
tente usar o HttpClient como Sephy disse:
fonte
THANKS
Os métodos acima mencionados são para se você tiver um URL da Web, mas se você tiver um html local, também poderá ter um html com este código
fonte