comment obtenir du contenu html à partir d'une webview?
Qui est la méthode la plus simple pour obtenir le code html à partir d'une webview?
J'ai essayé plusieurs méthodes de stackoverflow et google, mais ne peut pas trouver une méthode exacte. Merci de parler d'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");
}
}
InformationsquelleAutor | 2011-11-20
Vous devez vous connecter pour publier un commentaire.
En fait, cette question a plusieurs réponses. Voici 2 d'entre eux :
De cette façon, votre saisissez le code html à l'aide de javascript. Pas la plus belle façon, mais quand vous avez l'option javascript de votre interface, vous pouvez ajouter d'autres méthodes pour bricoler.
L'option que vous choisissez dépend aussi, je pense, sur ce que vous comptez faire avec l'extrait html...
webview.loadUrl("javascript:window.HtmlViewer.showHTML" + "('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
la loi-programme comme une fonction finish(),et l'arrêt de l'activité.pourquoi?comment le résoudre?Uncaught ReferenceError: HtmlViewer is not defined
, peu importe avec ou sans@JavascriptInterface
Dans KitKat et au-dessus, vous pouvez utiliser
evaluateJavascript
méthode sur webviewVoir cette réponse pour plus d'exemples
Pour android 4.2, n'oubliez pas d'ajouter @JavascriptInterface à tous javasscript fonctions
Android WebView est juste un autre moteur de rendu que le rendu HTML du contenu téléchargé à partir d'un serveur HTTP, un peu comme Chrome ou FireFox. Je ne sais pas la raison pourquoi vous avez besoin d'obtenir le rendu de la page (ou capture d'écran) à partir de WebView. Pour la plupart des situations, ce n'est pas nécessaire. Vous pouvez toujours obtenir le code HTML brut de contenu à partir de l'adresse HTTP du serveur directement.
Il y a déjà des réponses postées parler de l'obtention de la crue de flux à l'aide de HttpUrlConnection ou HttpClient. Sinon, il est très pratique de la bibliothèque lorsque vous traitez avec du contenu HTML analyser/processus sur Android: JSoup, il très simple API pour obtenir du contenu HTML du formulaire de serveur HTTP, et de fournir une représentation abstraite d'un document HTML afin de nous aider à gérer analyse HTML non seulement dans une plus OO style, mais aussi beaucoup plus facilement:
Il est très pratique lorsque, par exemple, vous souhaitez télécharger le document HTML en premier, puis ajouter un peu de custom css ou de javascript avant de les passer à WebView pour le rendu. Beaucoup plus sur leur site web officiel, la peine de le vérifier.
Un point de contact que j'ai trouvé qui doit être mis en place est "caché" au loin, dans le Proguard de configuration. Alors que le lecteur HTML invoque par le javascript interface amende lors du débogage de l'application, cela fonctionne plus dès que l'application a été exécuté par le biais de Proguard, à moins que le lecteur HTML fonction est déclarée dans le Proguard fichier de configuration, comme suit:
Testé et confirmé sur Android 2.3.6, 4.1.1 et 4.2.1.
Android ne vous permettra pas de le faire pour des problèmes de sécurité. Un mauvais développeur pourrait très facilement s'emparer de l'utilisateur saisi les informations de connexion.
Au lieu de cela, vous devez attraper le texte affiché dans la webview avant qu'il s'affiche. Si vous ne souhaitez 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 être en mesure de copier/paster, et à la fin de la
str
contiendra les mêmes html établi dans la webview. Cette réponse est à partir de Façon la plus simple de charger correctement le html de la page web dans une chaîne de caractères en Java et il devrait fonctionner sur Android ainsi. Je n'ai pas testé et n'a pas l'écrire moi-même, mais il peut vous aider.Aussi, l'URL c'est le tirant est codé en dur, de sorte que vous aurez à changer.
Pourquoi ne pas obtenir le code html d'abord, puis passer à la vue web?
Ce doit être à peu près à faire ce que vous voulez faire. Il est adapté de Est-il possible d'obtenir le code HTML à partir de WebView
et crier à https://stackoverflow.com/users/325081/aymon-fournier pour sa réponse.
Je dirais plutôt que d'essayer d'extraire le code HTML de la WebView, on extrait le HTML à partir de l'URL. Par cela, je veux dire à l'aide d'un tiers bibliothèque comme JSoup pour traverser le code HTML pour vous. Le code suivant va obtenir le code HTML à partir d'une URL spécifique pour vous
essayez d'utiliser HttpClient que Sephy a dit:
THANKS
Son Simple à mettre en œuvre Juste besoin javasript méthodes dans votre code html pour obtenir la valeur d'un contenu html.
Comme au-Dessus de votre code quelques modifications pour être besoin.
Votre Javascript dans html
& assurez-vous d'appeler callme comme ci-dessous dans html
<input name="FacadeAL" id="FacadeAL" type="text" size="5" onblur="callme()"/>
Espérons que cela vous aidera.
& Make sure you calling callme like below in html
.Vouliez-vous dire de placer la balise d'entrée ci-dessous le script dans le fichier html ?Thank You
Thank you very much
Je suggère d'essayer un peu de Réflexion approche, si vous avez le temps de passer sur le débogueur
(désolé mais je n'ai pas).
À 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 la
android.webkit.BrowserFrame
qui appellent 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
La mise en œuvre de la méthode native devrait être ici:
http://gitorious.org/0xdroid/external_webkit/blobs/a538f34148bb04aa6ccfbb89dfd5fd784a4208b1/WebKit/android/jni/WebCoreFrameBridge.cpp
Vous souhaite bonne chance!
données ci-dessus sont les méthodes pour si vous avez une url de site web ,mais si vous avez un local, html, alors vous pouvez avoir aussi html par le présent code