【问题标题】:Android WebView extract HTMLAndroid WebView 提取 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)" 有效吗?
  • 是的,当我在常规网络浏览器上测试它时它可以工作
  • 如果您遗漏了什么,请点击这里 -- stackoverflow.com/questions/11287820/…
  • 我什么都有,只是没有返回 HTML,因为 WebView 缺少功能,我正在寻找其他替代方案

标签: javascript java android 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。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多