【问题标题】:Passing data to local html file in android webView将数据传递到android webView中的本地html文件
【发布时间】:2021-05-19 07:47:11
【问题描述】:

我在尝试将数据传递到我的 html 文件时遇到了一些困难。我的 html 文件位于 assets 文件夹内的项目根目录中。简而言之,我在 webView 中显示我的 html 文件。

这是我的 mainActivity.kt 的一部分,用于填充我的 webView

mWebView = findViewById(R.id.activity_main_webview);
val webSettings = mWebView.settings
webSettings.javaScriptEnabled = true
mWebView.loadUrl("file:///android_asset/googlechart.html");

这是我的 googlechart.html 的一部分,它存储在本地资产文件夹中

var dataRow = [["mushroom", 1], ["fish", 3]]
var data = new google.visualization.DataTable();
data.addColumn('string', 'Topping');
data.addColumn('number', 'Slices');
data.addRows(dataRow);

我想将数据从 mainActivity.kt 传递到我的 googlechart.html,根据 Passing data from java class to Web View html 的回答,它没有解释如何将数据传递到存储在项目根目录中的 html 文件。我怎样才能做到这一点?

感谢任何帮助或见解。

【问题讨论】:

  • @blackapps 它在我的项目文件夹中,我的错
  • @blackapps 已编辑,感谢您的建议
  • @blackapps 它已被删除。希望它能让问题更清楚

标签: android html kotlin webview


【解决方案1】:

简单的解决方案

  1. loadUrl() 时使用查询
  2. script 中获取document.location.href
  3. 处理您的数据
    • 解码字符串、拆分等

示例

如果数据是json

安卓

val json = JsonObject().apply {
    addProperty("age","28")
    addProperty("name","john")
    addProperty("contents","test")
}
val url = "file:///android_asset/test.html?$json"
binding.webView.loadUrl(url)

本地.html

<!DOCTYPE html>
<html>

<body>
    <H1>test</H1>
    <oi id="list">
    </oi>
    <script type="text/javascript">
        function makeList() {
            const getOiTag = document.getElementById("list");

            const decodeUrl = decodeURI(document.location.href);
            const jsonStr = decodeUrl.split("?")[1];
            const json = JSON.parse(jsonStr);

            for(i in json){
                const li = document.createElement("li")
                li.textContent = i + " : " + json[i];
                getOiTag.appendChild(li);
            }
        }
        makeList()

    </script>
</body>

</html>

【讨论】:

  • 谢谢您的回答,使用的查询很适合发送单个字符串数据,但是如果我想传递一些复杂的数据,比如数组或对象呢?
  • 如果我是你,我会将任何数据放入查询中并在script 中处理(解码,...)。我测试了arrayobject,它会显示得很好。但我认为只是简单的string 最适合这种情况。
  • 你能详细说明一下吗?会很有帮助的
  • 谢谢,但我仍然想知道为什么val url = "file:///android_asset/test.html?$json" 在 webView 上显示时总是返回 ERR_FILE_NOT_FOUND,你的工作正常吗?
  • 你的.html文件名是test.html??不是googlechart .html?并检查您的json 是否可以显示在 logcat 中。我测试了json 工作良好,如屏幕截图所示。我从Gson使用JsonObject()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 2011-06-21
  • 1970-01-01
  • 2014-01-19
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多