Quelle est la méthode la plus simple pour obtenir du code html à partir d'une vue Web? J'ai essayé plusieurs méthodes de stackoverflow et google, mais je ne trouve pas de méthode exacte. Veuillez mentionner une manière exacte.
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
la source
la source
webview.loadUrl("javascript:window.HtmlViewer.showHTML" + "('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
le programme agit comme la fonction finish (), et arrête cette activité. pourquoi? comment la résoudre?Uncaught ReferenceError: HtmlViewer is not defined
, peu importe avec ou sans@JavascriptInterface
Dans KitKat et au-dessus, vous pouvez utiliser la
evaluateJavascript
méthode sur la vue WebVoir cette réponse pour plus d'exemples
la source
Pour Android 4.2, n'oubliez pas d'ajouter @JavascriptInterface à toutes les fonctions javasscript
la source
Android WebView n'est qu'un autre moteur de rendu qui rend le contenu HTML téléchargé à partir d'un serveur HTTP, un peu comme Chrome ou FireFox. Je ne sais pas pourquoi vous devez obtenir la page rendue (ou la capture d'écran) à partir de WebView. Pour la plupart des situations, ce n'est pas nécessaire. Vous pouvez toujours obtenir directement le contenu HTML brut du serveur HTTP.
Il y a déjà des réponses publiées sur l'obtention du flux brut à l'aide de HttpUrlConnection ou HttpClient. Alternativement, il existe une bibliothèque très pratique pour l'analyse / processus de contenu HTML sur Android: JSoup , il fournit une API très simple pour obtenir le contenu HTML du serveur HTTP et fournit une représentation abstraite du document HTML pour nous aider à gérer l'analyse HTML non seulement dans un style plus OO mais aussi beaucoup plus facilement:
C'est pratique lorsque, par exemple, vous souhaitez télécharger d'abord un document HTML, puis y ajouter du CSS ou du javascript personnalisé avant de le transmettre à WebView pour le rendu. Beaucoup plus sur leur site Web officiel, cela vaut la peine de le vérifier.
la source
Un point de contact que j'ai trouvé qui doit être mis en place est «caché» dans la configuration de Proguard. Alors que le lecteur HTML appelle très bien via l'interface javascript lors du débogage de l'application, cela ne fonctionne plus dès que l'application a été exécutée via Proguard, à moins que la fonction de lecture HTML ne soit déclarée dans le fichier de configuration Proguard, comme ceci:
Testé et confirmé sur Android 2.3.6, 4.1.1 et 4.2.1.
la source
Android ne vous permettra pas de faire cela pour des raisons de sécurité. Un développeur malveillant pourrait très facilement voler les informations de connexion saisies par l'utilisateur.
Au lieu de cela, vous devez attraper le texte affiché dans la vue Web avant qu'il ne soit affiché. Si vous ne voulez pas configurer un gestionnaire de réponse (comme pour les autres réponses), j'ai trouvé ce correctif avec quelques recherches sur Google:
C'est beaucoup de code, et vous devriez pouvoir le copier / coller, et à la fin il
str
contiendra le même html dessiné dans la vue Web. Cette réponse provient du moyen le plus simple de charger correctement le code HTML d'une page Web dans une chaîne en Java et devrait également fonctionner sur Android. Je ne l'ai pas testé et je ne l'ai pas écrit moi-même, mais cela pourrait vous aider.De plus, l'URL extraite est codée en dur, vous devrez donc la modifier.
la source
Pourquoi ne pas obtenir le code HTML d'abord, puis le transmettre à la vue Web?
Cela devrait faire ce que vous voulez faire. Il est adapté de Est-il possible d'obtenir le code HTML de WebView et criez à https://stackoverflow.com/users/325081/aymon-fournier pour sa réponse.
la source
Je suggère qu'au lieu d'essayer d'extraire le HTML de WebView, vous extrayez le HTML de l'URL. Par cela, je veux dire utiliser une bibliothèque tierce telle que JSoup pour parcourir le HTML pour vous. Le code suivant obtiendra le HTML d'une URL spécifique pour vous
la source
C'est simple à mettre en œuvre Il suffit d'avoir besoin de méthodes javasript dans votre html pour obtenir la valeur du contenu html. Comme ci-dessus votre code, quelques modifications sont nécessaires.
Votre Javascript en html
& Assurez-vous d'appeler callme comme ci-dessous en html
<input name="FacadeAL" id="FacadeAL" type="text" size="5" onblur="callme()"/>
J'espère que ceci vous aidera.
la source
& Make sure you calling callme like below in html
Avez-vous voulu placer la balise d'entrée sous le script dans un fichier html?Thank You
Thank you very much
Je suggère d'essayer une approche de réflexion, si vous avez du temps à consacrer au débogueur (désolé mais je ne l'ai pas fait).
À partir de la
loadUrl()
méthode de laandroid.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
Vous devriez arriver sur le
android.webkit.BrowserFrame
qui appelle lanativeLoadUrl()
méthode 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
L'implémentation de la méthode native devrait être ici:
http://gitorious.org/0xdroid/external_webkit/blobs/a538f34148bb04aa6ccfbb89dfd5fd784a4208b1/WebKit/android/jni/WebCoreFrameBridge.cpp
Je vous souhaite bonne chance!
la source
essayez d'utiliser HttpClient comme Sephy l'a dit:
la source
THANKS
les méthodes ci-dessus sont pour si vous avez une URL Web, mais si vous avez un html local, vous pouvez également avoir du html par ce code
la source