Android在Webview方向更改中保留JS变量

时间:2012-02-07 17:01:21

标签: javascript android android-webview

我有一个webview,我加载了一些html5 + js。我的webapp非常耗费数据。使用状态函数,我可以回到正确的“页面”,我应该在方向更改后打开,但是我的webapp处于危险之中,因为我的所有javascript变量都已重置。

是否有方法可以在webview方向更改时保存和恢复所有javascript变量?输入表格文本框的值怎么样?

==================

我在这方面取得了一些进展。在我的JS中,我有一个名为requestState();的钩子。当调用此函数时,它会通过JS接口将所有JS变量发送到android / java端。

在Java方面,我使用getLastNonConfigurationInstanceonRetainNonConfigurationInstance保留此信息。我已经测试了输出,它确实将我的所有JS变量保存到Java中的对象中,然后在方向更改上更改了活动状态。

问题是回到我应该去的地方。我的JS中有一个函数,它与requestState();的{​​{1}}相反。使用setState(input);从Android端调用此函数。在缩小webview并调用mywebview.loadUrl( "javascript:setState(" + jsonStr + ")" );之后,我在onCreate结束时执行此操作。

我注意到的是wv.restoreState(savedInstanceState);在我调用它时尚未定义!事实上,在我的活动的onCreate函数结束时,我的JS脚本都没有准备好被调用甚至存在/找到。为了测试我的理智,我尝试setState,我确实看到了我期望看到的内容 - 包含所有变量值的警报。但是我注意到在警报出现之前页面本身没有呈现。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

不要浪费你的时间。经过多次危险之后,我决定使用html5本地存储,我猜大多数人都必须使用,因为无法解决上述问题。

答案 1 :(得分:0)

我能想到的唯一答案是使用loadDataWithBaseURL重新加载WebView,并传递一个预处理版本的页面内容,插入一个自定义的body.onload处理程序,重新初始化所有必要的变量。

也就是说,一旦你看到< BODY序列,就预先加上< SCRIPT> ...< / SCRIPT>包含执行必要设置的函数定义的部分,然后将ONLOAD属性注入< BODY ...>标记以调用此函数。

当然,如果已经有< BODY ONLOAD ...>,那么事情会变得稍微复杂一些。但只是轻微......