Android WebView 提取 HTML

Posted

技术标签:

【中文标题】Android WebView 提取 HTML【英文标题】:Android WebView extract HTML 【发布时间】:2016-04-08 01:25:58 【问题描述】:

基本上,我正在开发一个 android 应用程序,用户可以在其中访问页面的 html 内容并选择下一步如何处理它是否写入文件系统、通过 FTP 上传等。用户看不到HTML,但它会存储它以供以后查看。

我尝试添加一个 javascript 接口,然后将其添加到 onPageFinished 事件中,它只是不想交出 HTML,这就是我所做的:

所以对于我的 onPageFinished 事件:

Webview wv = (WebView) findViewById(R.id.webbrowser);
wv.addJavascriptInterface(new JSEngine() , "JSEngine");
  public void onPageFinished(WebView wv , String html)
   //code to execute
   wv.loadUrl("javascript: window.JSEngine.processHTML(document.body.innerHTML)");
  

由于某些原因无法共享在 processHTML 中执行的代码,但我可以告诉你 html 变量是空的。

然后是我的javascript界面​​:

Class JSEngine
  @JavascriptInterface
  public void processHTML(String html)
    //code to execute
    //html variable is null
  

有什么可以解决我的问题吗?我的所有权限都已设置,我的课程运行良好,直到 Webview 移交 html。

【问题讨论】:

"javascript: window.JSEngine.processHTML(document.body.innerHTML)" 有效吗? 是的,当我在常规网络浏览器上测试它时它可以工作 如果您遗漏了什么,请点击这里 -- ***.com/questions/11287820/… 我什么都有,只是没有返回 HTML,因为 WebView 缺少功能,我正在寻找其他替代方案 【参考方案1】:

如果用户不需要查看 HTML,那么忘记WebView,使用常规 HTTP 流打开页面,读取 HTML 数据并使用它。

我怀疑实际上有网页的预览,在这种情况下,最好的办法是读取 HTML 数据流,然后转身在 WebViewloadDataWithBaseURL() 中显示。

另一种可能是覆盖WebViewClient.onLoadResource() 并打开一个HTTP 流来读取该URL 上的数据。这是多余的,因为WebView 将自己读取数据,但问题是WebView 只是不给你钩到它正在读取的HTTP 数据流。

【讨论】:

是的,但我还需要 javascript 到位,我需要它像基本浏览器一样执行 这是一个非常好的主意,因为我已经想到了,不过感谢您的回答,如果它在 HTTP 流上执行 javascript 将是正确的 这取决于您要保存的数据。如果您在loadDataWithBaseUrl() 中有正确的基本 URL,则 JavaScript 将由 WebView 加载,并在加载 HTML 数据后按预期运行。基本 URL 的整个想法是处理同源策略。 但我希望在完成任何其他操作之前通过 Javascript 更改 HTML,这就是为什么我想使用 webview 它(当时)是解决我的问题的简单方法,但我有更多问题,我现在只会使用 WebView 来查看实际的 HTML。

以上是关于Android WebView 提取 HTML的主要内容,如果未能解决你的问题,请参考以下文章

Android webView 注入js文件,及交互

懂球帝Android客户端WebView优化之路

在 WebView 中注入 Javascript 桥接器

Android WebView

android 开发webview如何加载p标签的html

android webview