我通过首先设置 JavaScript 环境然后加载依赖于 JavaScript 环境存在的 Web 内容来使用具有本地数据的 Android WebView:
测试.js:
alert("test.js: type of window.myVar is: " + (typeof window.myVar));
window.myVar = {};
测试.html:
<!DOCTYPE>
<html><head>
<script>
alert("test.html: type of window.myVar is: " + (typeof window.myVar));
</script>
</head><body></body></html>
Java 加载过程:
private void loadData() {
_webView.loadUrl("javascript:" + testJSContent);
_webView.loadDataWithBaseURL(null, testHTMLContent, "text/html", "utf-8", null);
}
第一次 loadData() 被触发时,window.myVar 可从加载的 HTML 页面中获得,但未定义 在任何后续尝试中.以下是三个调用的警报输出:
->调用了loadData()
“test.js:window.myVar 的类型是:未定义”
“test.html:window.myVar 的类型是:对象”
-> 调用了 loadData()
“test.js:window.myVar 的类型是:对象”
“test.html:window.myVar 的类型是:未定义”
-> 调用了 loadData()
“test.js:window.myVar 的类型是:未定义”
“test.html:window.myVar 的类型是:未定义”
知道为什么通过注入(inject)创建的 JavaScript 对象仅在第二页加载之前持久存在吗?
感谢您的帮助!
最佳答案
您应该首先加载 html,然后在该页面完全加载后注入(inject) javascript。在 WebViewClient 的 OnPageFinished 中执行。
关于javascript - 为什么 Android WebView 在第二个页面加载时重置 JavaScript 上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15437008/