javascript - 为什么 Android WebView 在第二个页面加载时重置 JavaScript 上下文?

标签 javascript android webview

我通过首先设置 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/

相关文章:

android - 如何在 ViewPager2 中禁用特定方向的滑动

java - 在 Android 中获取 ArrayList<DMatch> 的大小

android - Android 4.4 webviews 上的模糊文本

java - Android WebView - 2018年文本选择监听器

javascript - Vue 按钮,仅在检查数组/对象的值后调用方法

javascript - 如何使用 extjs 4 获取 div 的宽度和高度?

javascript - 为什么球会穿过砖 block ?

javascript - 如何在 jquery 中添加减号?

java - 基于输入字段的微调器

android - 单选按钮样式未显示在 webview 中