Manakah metode paling sederhana untuk mendapatkan kode html dari tampilan web? Saya telah mencoba beberapa metode dari stackoverflow dan google, tetapi tidak dapat menemukan metode yang tepat. Harap sebutkan cara yang tepat.
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
sumber
sumber
webview.loadUrl("javascript:window.HtmlViewer.showHTML" + "('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
program bertindak seperti fungsi finish (), dan menghentikan aktivitas itu. mengapa? bagaimana menyelesaikannya?Uncaught ReferenceError: HtmlViewer is not defined
, tidak peduli dengan atau tanpa@JavascriptInterface
Di KitKat dan di atasnya, Anda dapat menggunakan
evaluateJavascript
metode di tampilan webLihat jawaban ini untuk contoh lainnya
sumber
Untuk Android 4.2, jangan lupa menambahkan @JavascriptInterface ke semua fungsi javasscript
sumber
Android WebView hanyalah mesin render lain yang merender konten HTML yang diunduh dari server HTTP, seperti Chrome atau FireFox. Saya tidak tahu alasan mengapa Anda perlu mendapatkan halaman yang dirender (atau tangkapan layar) dari WebView. Untuk sebagian besar situasi, ini tidak perlu. Anda selalu bisa mendapatkan konten HTML mentah dari server HTTP secara langsung.
Sudah ada jawaban yang diposting berbicara tentang mendapatkan aliran mentah menggunakan HttpUrlConnection atau HttpClient. Sebagai alternatif, ada pustaka yang sangat berguna saat menangani penguraian / proses konten HTML di Android: JSoup , ini menyediakan API yang sangat sederhana untuk mendapatkan konten HTML dari server HTTP, dan menyediakan representasi abstrak dari dokumen HTML untuk membantu kami mengelola penguraian HTML tidak hanya dalam gaya yang lebih OO tetapi juga lebih mudah:
Ini berguna ketika, misalnya, Anda ingin mengunduh dokumen HTML terlebih dahulu, lalu menambahkan beberapa css atau javascript khusus ke dokumen tersebut sebelum meneruskannya ke WebView untuk dirender. Lebih banyak lagi di situs web resmi mereka, layak untuk dicoba.
sumber
Satu titik sentuh yang saya temukan yang perlu diterapkan adalah "tersembunyi" di konfigurasi Proguard. Meskipun pembaca HTML memanggil melalui antarmuka javascript dengan baik saat men-debug aplikasi, ini tidak lagi berfungsi segera setelah aplikasi dijalankan melalui Proguard, kecuali jika fungsi pembaca HTML dideklarasikan dalam file konfigurasi Proguard, seperti:
Diuji dan dikonfirmasi di Android 2.3.6, 4.1.1 dan 4.2.1.
sumber
Android tidak akan membiarkan Anda melakukan ini untuk masalah keamanan. Pengembang jahat dapat dengan mudah mencuri informasi login yang dimasukkan pengguna.
Sebagai gantinya, Anda harus menangkap teks yang sedang ditampilkan di webview sebelum ditampilkan. Jika Anda tidak ingin menyiapkan penangan respons (sesuai jawaban lain), saya menemukan perbaikan ini dengan beberapa googling:
Ini adalah kode yang banyak, dan Anda harus dapat menyalin / memasukkannya, dan pada akhirnya
str
akan berisi html yang sama yang digambar dalam tampilan web. Jawaban ini berasal dari cara termudah untuk memuat html dengan benar dari halaman web ke dalam string di Java dan seharusnya berfungsi di Android juga. Saya belum menguji ini dan tidak menulisnya sendiri, tapi mungkin bisa membantu Anda.Selain itu, URL yang ditarik adalah hardcode, jadi Anda harus mengubahnya.
sumber
Mengapa tidak mendapatkan html terlebih dahulu lalu meneruskannya ke tampilan web?
Ini kira-kira harus melakukan apa yang ingin Anda lakukan. Ini diadaptasi dari Apakah mungkin untuk mendapatkan kode HTML dari WebView dan berteriak ke https://stackoverflow.com/users/325081/aymon-fournier untuk jawabannya.
sumber
Saya akan menyarankan daripada mencoba mengekstrak HTML dari WebView, Anda mengekstrak HTML dari URL. Dengan ini, maksud saya menggunakan perpustakaan pihak ketiga seperti JSoup untuk melintasi HTML untuk Anda. Kode berikut akan mendapatkan HTML dari URL tertentu untuk Anda
sumber
Sederhana untuk diimplementasikan Hanya perlu metode javasript di html Anda untuk mendapatkan nilai konten html. Seperti Di atas kode Anda, beberapa perubahan perlu dilakukan.
Javascript Anda dalam html
& Pastikan Anda menelepon callme seperti di bawah ini di html
<input name="FacadeAL" id="FacadeAL" type="text" size="5" onblur="callme()"/>
Semoga ini bisa membantu Anda.
sumber
& Make sure you calling callme like below in html
Apakah Anda bermaksud menempatkan tag input di bawah skrip dalam file html?Thank You
Thank you very much
Saya sarankan untuk mencoba beberapa pendekatan Refleksi, jika Anda punya waktu untuk dihabiskan untuk debugger (maaf tapi saya tidak punya).
Mulai dari
loadUrl()
metodeandroid.webkit.WebView
kelas: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
Anda harus sampai pada
android.webkit.BrowserFrame
panggilan itu dengannativeLoadUrl()
metode native: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
Penerapan metode asli seharusnya ada di sini:
http://gitorious.org/0xdroid/external_webkit/blobs/a538f34148bb04aa6ccfbb89dfd5fd784a4208b1/WebKit/android/jni/WebCoreFrameBridge.cpp
Semoga Anda beruntung!
sumber
coba gunakan HttpClient seperti yang dikatakan Sephy:
sumber
THANKS
metode yang diberikan di atas adalah untuk jika Anda memiliki url web, tetapi jika Anda memiliki html lokal maka Anda juga dapat memiliki html dengan kode ini
sumber