【问题标题】:How to get the html document as string in android browser如何在android浏览器中将html文档作为字符串获取
【发布时间】:2017-01-06 12:08:07
【问题描述】:

在我的代码中。我想在加载网页时获取生成的源代码(html 文档)。我写了函数 onPageFinished() view.loadUrl("javascript:(function() { document.getElementByTagName('html')[0].innerHTML"); 用于获取代码,但它显示错误“[INFO:CONSOLE (1)]“未捕获的语法错误:输入意外结束”,来源:(1)“。 网页显示正确 我想获取源代码网页。检索源代码并显示它的方法是什么?怎么可能?

我的代码如下所示:

 import android.app.Activity;
 import android.graphics.Bitmap;
 import android.os.Bundle;
 import android.view.KeyEvent;
 import android.view.View;
 import android.webkit.WebSettings;
 import android.webkit.WebView;
 import android.widget.Button;
 import android.widget.EditText;
 import android.widget.ProgressBar;



 public class MainActivity extends Activity {

WebView web1;
EditText ed1;
Button bt1;
String Address;
String add;
ProgressBar pbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    web1 = (WebView)findViewById(R.id.webView1);
    ed1 = (EditText)findViewById(R.id.editText1);
    bt1 = (Button)findViewById(R.id.button1);
    pbar = (ProgressBar)findViewById(R.id.progressBar1);
    pbar.setVisibility(View.GONE);

    bt1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            Address = "http://" + ed1.getText().toString();
            WebSettings webSetting = web1.getSettings();
            webSetting.setBuiltInZoomControls(true);
            webSetting.setJavaScriptEnabled(true);
            webSetting.setDomStorageEnabled(true);

            web1.setWebViewClient(new WebViewClient());

            web1.loadUrl(Address);

        }
    });
}

public class WebViewClient extends android.webkit.WebViewClient
{
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {

        // TODO Auto-generated method stub
        super.onPageStarted(view, url, favicon);
        pbar.setVisibility(View.VISIBLE);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        // TODO Auto-generated method stub
        return true;
    }
    @Override
    public void onPageFinished(WebView view, String url) {

        // TODO Auto-generated method stub

        super.onPageFinished(view, url);
        pbar.setVisibility(View.GONE);
        view.loadUrl("javascript:(function() { document.getElementByTagName('html')[0].innerHTML");
    }

}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if ((keyCode == KeyEvent.KEYCODE_BACK) && web1.canGoBack()) {
        web1.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
 }

【问题讨论】:

    标签: javascript android html dom html-parsing


    【解决方案1】:

    你可以像这样从网页中获取文本,然后做你想做的事:

    public class HTMLPageDownloader extends AsyncTask<Void, Void, String> {
            public static interface HTMLPageDownloaderListener {
                public abstract void completionCallBack(String html);
            }
            public HTMLPageDownloaderListener listener;
            public String link;
            public HTMLPageDownloader (String aLink, HTMLPageDownloaderListener aListener) {
                listener = aListener;
                link = aLink;
            }
    
            @Override
            protected String doInBackground(Void... params) {
                // TODO Auto-generated method stub
                HttpClient client = new DefaultHttpClient();
                HttpGet request = new HttpGet(link);
                String html = "";
                try {
                    HttpResponse response = client.execute(request);
                    InputStream in;
                    in = response.getEntity().getContent();
                    BufferedReader reader = new BufferedReader(
                            new InputStreamReader(in));
                    StringBuilder str = new StringBuilder();
                    String line = null;
                    while ((line = reader.readLine()) != null) {
                        str.append(line);
                    }
                    in.close();
                    html = str.toString();
                } catch (IllegalStateException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                return html;
            }
    
            @Override
            protected void onPostExecute(String result) {
                // TODO Auto-generated method stub
                super.onPostExecute(result);
                if (!isCancelled()) {
                    listener.completionCallBack(result);
                }
            }
        }
    

    【讨论】:

    • 我想重写源代码并在浏览器中运行。例如,我想检测网页中的电话号码,然后通过重写代码(如Skype点击通话)突出显示电话号码。这段代码有可能吗?
    • 我不明白你的目的是什么,你能详细说明一下吗。
    • 在我的浏览器中,当我输入网站的网址时。当页面加载时,页面必须重写或重新设计html代码。 (在Skype点击通话功能中,它可能会检测页面中的电话号码并重新设计页面中的电话号码)。清楚了吗?
    • 您的意思是,只要光标出现在电话号码上方,电话号码就会弹出来电窗口。
    • 是的。我想检测加载网页的电话号码。每当光标出现在其上方时,都会弹出呼叫。
    猜你喜欢
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 2014-03-12
    • 2021-01-22
    • 1970-01-01
    相关资源
    最近更新 更多