Jaka jest najprostsza metoda uzyskania kodu HTML z widoku internetowego? Wypróbowałem kilka metod ze stackoverflow i google, ale nie mogę znaleźć dokładnej metody. Podaj dokładny sposób.
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
źródło
źródło
webview.loadUrl("javascript:window.HtmlViewer.showHTML" + "('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
program zachowuje się jak funkcja finish () i zatrzymuje tę czynność. dlaczego? jak to rozwiązać?Uncaught ReferenceError: HtmlViewer is not defined
, nieważne z czy bez@JavascriptInterface
W KitKat i nowszych
evaluateJavascript
wersjach można użyć metody w widoku sieci WebZobacz tę odpowiedź, aby uzyskać więcej przykładów
źródło
W przypadku Androida 4.2 nie zapomnij dodać @JavascriptInterface do wszystkich funkcji javasscript
źródło
Android WebView to kolejny silnik renderujący, który renderuje zawartość HTML pobraną z serwera HTTP, podobnie jak Chrome czy FireFox. Nie wiem, dlaczego potrzebujesz wyrenderowanej strony (lub zrzutu ekranu) z WebView. W większości sytuacji nie jest to konieczne. Zawsze możesz pobrać surową zawartość HTML bezpośrednio z serwera HTTP.
Istnieją już odpowiedzi na temat pobierania surowego strumienia przy użyciu HttpUrlConnection lub HttpClient. Alternatywnie, istnieje bardzo przydatna biblioteka do zajmowania się analizą / procesem treści HTML na Androidzie: JSoup , zapewnia bardzo proste API do pobierania treści HTML z serwera HTTP i zapewnia abstrakcyjną reprezentację dokumentu HTML, aby pomóc nam zarządzać analizowaniem HTML nie tylko w stylu bardziej OO, ale także znacznie łatwiej:
Jest to przydatne, gdy na przykład chcesz najpierw pobrać dokument HTML, a następnie dodać do niego niestandardowy css lub javascript przed przekazaniem go do WebView w celu renderowania. Znacznie więcej na ich oficjalnej stronie internetowej, warto to sprawdzić.
źródło
Odkryłem, że jeden punkt dotykowy, który należy wprowadzić, jest „ukryty” w konfiguracji Proguard. Podczas gdy czytnik HTML wywołuje interfejs javascript dobrze podczas debugowania aplikacji, nie działa to już, gdy aplikacja zostanie uruchomiona przez Proguard, chyba że funkcja czytnika HTML jest zadeklarowana w pliku konfiguracyjnym Proguard, na przykład:
Przetestowane i potwierdzone na Androidzie 2.3.6, 4.1.1 i 4.2.1.
źródło
Android nie pozwoli ci tego zrobić ze względów bezpieczeństwa. Zły programista może bardzo łatwo ukraść dane logowania wprowadzone przez użytkownika.
Zamiast tego musisz przechwycić tekst wyświetlany w widoku sieci Web, zanim zostanie wyświetlony. Jeśli nie chcesz konfigurować modułu obsługi odpowiedzi (zgodnie z innymi odpowiedziami), znalazłem tę poprawkę przy użyciu googlowania:
To dużo kodu i powinieneś być w stanie go skopiować / wkleić, a na końcu
str
będzie zawierał ten sam html narysowany w widoku WWW. Ta odpowiedź pochodzi z najprostszego sposobu, aby poprawnie załadować html ze strony internetowej do ciągu znaków w Javie i powinna działać również na Androidzie. Nie testowałem tego i nie napisałem tego sam, ale może ci to pomóc.Ponadto pobierany przez to adres URL jest zakodowany na stałe, więc musisz to zmienić.
źródło
Dlaczego nie pobrać najpierw kodu HTML, a następnie przekazać go do widoku internetowego?
Powinno to z grubsza zrobić to, co chcesz. Jest zaadaptowany z Czy można pobrać kod HTML z WebView i krzyczeć na https://stackoverflow.com/users/325081/aymon-fournier, aby uzyskać odpowiedź.
źródło
Sugerowałbym, aby zamiast próbować wyodrębnić kod HTML z WebView, wyodrębnić HTML z adresu URL. Rozumiem przez to użycie biblioteki innej firmy, takiej jak JSoup, do przeglądania HTML za Ciebie. Poniższy kod pobierze kod HTML z określonego adresu URL
źródło
Jego prosta implementacja Wystarczy, że użyjesz metod javasript w swoim html, aby uzyskać wartość treści html. Jak nad kodem, trzeba będzie wprowadzić pewne zmiany.
Twój JavaScript w html
& Upewnij się, że dzwonisz do callme jak poniżej w html
<input name="FacadeAL" id="FacadeAL" type="text" size="5" onblur="callme()"/>
Mam nadzieję, że to ci pomoże.
źródło
& Make sure you calling callme like below in html
chodziło Ci o umieszczenie znacznika wejściowego poniżej skryptu w pliku html?Thank You
Thank you very much
Proponuję wypróbować podejście Reflection, jeśli masz czas na debugger (przepraszam, ale nie miałem).
Zaczynając od
loadUrl()
metodyandroid.webkit.WebView
zajęć: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
Powinieneś dotrzeć do
android.webkit.BrowserFrame
tego wywołanianativeLoadUrl()
metody natywnej: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
Implementacja metody natywnej powinna być tutaj:
http://gitorious.org/0xdroid/external_webkit/blobs/a538f34148bb04aa6ccfbb89dfd5fd784a4208b1/WebKit/android/jni/WebCoreFrameBridge.cpp
Życzę Ci szczęścia!
źródło
spróbuj użyć HttpClient, jak powiedziała Sephy:
źródło
THANKS
powyższe metody są dla jeśli masz adres URL, ale jeśli masz lokalny html, możesz również mieć html za pomocą tego kodu
źródło