0

这是我的代码。

我只想在加载 URL 后从 Webview 获取页面内容。

在 Android 上,我有一个显示页面的 WebView。

如何在不再次请求页面的情况下获取页面源?

看来 WebView 在 Android 3.0 中应该有某种 WebResourceResponse() 方法,但不知道如何使用它。

 public class WebActivity extends Activity {
WebView mWebView;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mWebView = (WebView) findViewById(R.id.webView);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.loadUrl("https://xyz.com");
    mWebView.setWebViewClient(new HelloWebViewClient());



 }



       private class HelloWebViewClient extends WebViewClient  {

      public WebResourceResponse shouldInterceptRequest (WebView view, String url)
      {
        return null;


      }

      @Override
        public void onPageFinished(WebView view, String url)
        {
           /* This call inject JavaScript into the page which just finished loading. */
           mWebView.loadUrl("javascript:window.HTMLOUT.processHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");

        }
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url);
    return true;
}


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

1 回答 1

0

我知道这已经过时了,但对于未来的访客来说,以下应该可以工作。

首先,您需要定义一个接口,例如:

final class LoadingInterface {
    @JavascriptInterface 
    public void outputHTML(final String html){
        //do what ever you want with html
    }
}

然后在您的 WebView 通话中
webView.addJavascriptInterface(new LoadingInterface(), "INTERFACE");

投入onPageFinished

String js = "javascript:"
        +"var html = document.getElementsByTagName('html')[0].innerHTML;"
        +"window.INTERFACE.outputSchedule(html);";
        webView.loadUrl(js);

如果您只需要页面的一部分,则可以替换getElementsByTagName('html')[0]getElementById('partOfPage')

于 2013-10-17T20:40:56.900 回答