【问题标题】:How to save an Android webview to DOM, and load a webview from a given DOM?如何将 Android webview 保存到 DOM,并从给定 DOM 加载 webview?
【发布时间】:2014-08-30 21:18:03
【问题描述】:

我可以将 Andoird WebView 的 DOM 保存到本地存储中的文件吗?另一方面,在不同的App中,是否可以从本地存储的DOM文件中加载WebView?

我问这个是因为我需要将在线表单数据保存在网页中,并确保我可以在不同的 App 中加载完全相同的网页(包括表单数据)。

我是 android 和 JavaScript 的新手。我阅读了一些关于在 JavaScript 中操作 DOM 的文章,但我不知道如何使用 Android WebView 来做到这一点。谁能告诉我一些使用 JavaScript 将 WebView 的 DOM 保存到共享存储的示例代码,以及从 DOM 文件加载网页的代码。

非常感谢!

【问题讨论】:

  • 在 android 中,应用程序在不同的虚拟机中运行,因此每个应用程序内部的 webviews 都在它们自己的沙箱中。由于是这种情况,因此无法从其他应用程序访问 localStorage 数据。
  • 谢谢 Mldhun。是否可以使用 Javascript 将 DOM 保存到文件系统而不是沙箱中,以便其他应用可以访问 DOM?
  • 你能给我看一些示例代码吗?我是 Android 和 JavaScript 的新手,我不知道如何编写代码。非常感谢。
  • 我会把它添加为答案。

标签: javascript android dom webview


【解决方案1】:

正如我在 cmets 中提到的,无法从其他应用程序访问本地存储的内容。相反,您可以将内容保存到文件中并在其他应用程序中使用。

获取 DOM:

来自网络视图,

var dom = document.getElementsByTagName('html')[0].outerHTML;

使用Javascript Interface将其存储到文件

来自documentation;

将提供的 Java 对象注入此 WebView。对象是 注入到主框架的 JavaScript 上下文中,使用 提供的名称。这允许访问 Java 对象的方法 来自 JavaScript。针对 API 级别 JELLY_BEAN_MR1 的应用程序 及以上,只有带有注释的公共方法 可以从 JavaScript 访问 JavascriptInterface。

Class FileWriter{

    @JavascriptInterface
    public void writeToFile(String dataToBeWritten) {
            writeDataToFile(dataToBeWritten);
    }

    public static void writeDataToFile(Sting data){
      // java code to write data to file
    }
}

在你的主要活动中,

webView.addJavascriptInterface(new FileWriter(), "FileWriter");

这会将 FileWriter 公开为 webview 的 JavaScript 领域中全局命名空间中的一个对象。

现在来自 JavaScript:

FileWriter.writeToFile(dom);

将使用传递的数据在指定位置创建一个文件。

希望这会有所帮助。

【讨论】:

  • 感谢您的帮助,Mldhun。有用。唯一需要更改的是将“getElementByTagName”替换为“getElementsByTagName”。
猜你喜欢
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多