首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从网页视图中获取html内容?

如何从网页视图中获取html内容?
EN

Stack Overflow用户
提问于 2011-11-20 18:36:33
回答 11查看 231.8K关注 0票数 129

从webview获取html代码最简单的方法是什么?我尝试了stackoverflow和google的几种方法,但找不到确切的方法。请告诉我一个确切的方法。

代码语言:javascript
复制
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");

}

}
EN

回答 11

Stack Overflow用户

发布于 2015-08-17 06:30:37

在KitKat及更高版本中,您可以在webview上使用evaluateJavascript方法

代码语言:javascript
复制
wvbrowser.evaluateJavascript(
        "(function() { return ('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>'); })();",
         new ValueCallback<String>() {
            @Override
            public void onReceiveValue(String html) {
                Log.d("HTML", html); 
                // code here
            }
    });

请参阅this answer了解更多示例

票数 75
EN

Stack Overflow用户

发布于 2013-03-27 23:35:38

对于Android4.2,不要忘记将@JavascriptInterface添加到所有javascript函数中

票数 42
EN

Stack Overflow用户

发布于 2012-03-08 05:45:52

Android WebView只是另一个渲染引擎,可以渲染从HTTP服务器下载的内容,就像Chrome或FireFox一样。我不知道为什么你需要从WebView获取渲染的页面(或屏幕截图)。在大多数情况下,这是不必要的。您总是可以直接从HTTP服务器获取原始的HTML内容。

已经发布了一些关于使用HttpUrlConnection或HttpClient获取原始流的答案。或者,当在安卓上处理HTML内容解析/处理时,有一个非常方便的库:JSoup,它提供了非常简单的API来从HTTP服务器获取HTML内容,并提供了HTML文档的抽象表示,帮助我们不仅以更面向对象的风格管理HTML解析,而且更容易:

代码语言:javascript
复制
// Single line of statement to get HTML document from HTTP server.
Document doc = Jsoup.connect("http://en.wikipedia.org/").get();

例如,当您想要先下载HTML文档,然后在将文档传递给WebView进行呈现之前添加一些自定义的css或javascript时,它是很方便的。在他们的官方网站上有更多,值得一看。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8200945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档