Какой самый простой способ получить html-код из веб-просмотра? Я пробовал несколько методов из stackoverflow и google, но не могу найти точный метод. Пожалуйста, укажите точный способ.
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
источник
источник
webview.loadUrl("javascript:window.HtmlViewer.showHTML" + "('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
программа действует как функция finish () и останавливает это действие. почему? как это решить?Uncaught ReferenceError: HtmlViewer is not defined
, независимо от того, есть они или нет@JavascriptInterface
В KitKat и выше вы можете использовать
evaluateJavascript
метод в веб-просмотреСм. Этот ответ для получения дополнительных примеров
источник
Для Android 4.2 не забудьте добавить @JavascriptInterface ко всем функциям javasscript.
источник
Android WebView - это еще один движок рендеринга, который рендерит HTML-содержимое, загруженное с HTTP-сервера, во многом как Chrome или FireFox. Я не знаю, почему вам нужно получить отрисованную страницу (или снимок экрана) из WebView. В большинстве случаев в этом нет необходимости. Вы всегда можете получить необработанный HTML-контент напрямую с HTTP-сервера.
Уже опубликованы ответы о получении необработанного потока с помощью HttpUrlConnection или HttpClient. В качестве альтернативы есть очень удобная библиотека при работе с анализом / процессом HTML-контента на Android: JSoup , она предоставляет очень простой API для получения HTML-содержимого с HTTP-сервера и предоставляет абстрактное представление HTML-документа, чтобы помочь нам управлять не только синтаксическим анализом HTML. в более OO-стиле, но также намного проще:
Это удобно, когда, например, вы хотите сначала загрузить документ HTML, а затем добавить в него некоторый собственный CSS или JavaScript, прежде чем передавать его в WebView для рендеринга. Гораздо больше на их официальном веб-сайте, стоит посмотреть.
источник
Я обнаружил, что одна точка соприкосновения, которую необходимо установить, «спрятана» в конфигурации Proguard. Хотя программа чтения HTML прекрасно запускается через интерфейс javascript при отладке приложения, это больше не работает, как только приложение было запущено через Proguard, если функция чтения HTML не объявлена в файле конфигурации Proguard, например:
Проверено и подтверждено на Android 2.3.6, 4.1.1 и 4.2.1.
источник
Android не позволит вам сделать это из соображений безопасности. Злонамеренный разработчик может очень легко украсть введенную пользователем информацию для входа.
Вместо этого вам нужно перехватить текст, отображаемый в веб-просмотре, прежде чем он отобразится. Если вы не хотите настраивать обработчик ответа (в соответствии с другими ответами), я нашел это исправление с некоторым поиском в Google:
Это большой объем кода, и вы должны иметь возможность скопировать / вставить его, и в конце он
str
будет содержать тот же HTML-код, нарисованный в веб-просмотре. Этот ответ из самого простого способа правильно загрузить html с веб-страницы в строку на Java, и он также должен работать на Android. Я не тестировал это и сам не писал, но это может вам помочь.Кроме того, этот URL-адрес жестко запрограммирован, поэтому вам придется его изменить.
источник
Почему бы не получить сначала html, а затем передать его в веб-просмотр?
Это должно примерно делать то, что вы хотите сделать. Он адаптирован из книги Можно ли получить HTML-код из WebView и передать ответ на https://stackoverflow.com/users/325081/aymon-fournier .
источник
Я бы предложил вместо того, чтобы пытаться извлечь HTML из WebView, вы извлекаете HTML из URL-адреса. Под этим я подразумеваю использование сторонней библиотеки, такой как JSoup, для просмотра HTML за вас. Следующий код получит HTML-код с определенного URL-адреса для вас.
источник
Его просто реализовать Просто нужны методы javasript в вашем html, чтобы получить значение содержимого html. Как и над вашим кодом, потребуются некоторые изменения.
Ваш Javascript в html
& Убедитесь, что вы вызываете callme, как показано ниже в html
<input name="FacadeAL" id="FacadeAL" type="text" size="5" onblur="callme()"/>
Надеюсь, что это поможет вам.
источник
& Make sure you calling callme like below in html
Вы хотели разместить тег ввода под скриптом в html файле?Thank You
Thank you very much
Я предлагаю попробовать какой-нибудь подход Reflection, если у вас есть время потратить на отладчик (извините, но у меня его не было).
Начиная с
loadUrl()
методаandroid.webkit.WebView
класса: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
Вы должны прийти к
android.webkit.BrowserFrame
вызовуnativeLoadUrl()
собственного метода: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
Реализация нативного метода должна быть здесь:
http://gitorious.org/0xdroid/external_webkit/blobs/a538f34148bb04aa6ccfbb89dfd5fd784a4208b1/WebKit/android/jni/WebCoreFrameBridge.cpp
Удачи!
источник
попробуйте использовать HttpClient, как сказал Сефи:
источник
THANKS
Приведенные выше методы предназначены для того, если у вас есть веб-адрес, но если у вас есть локальный html, вы также можете иметь html с помощью этого кода
источник