Android webView evaluateJavaScript 执行未定义函数
Android webView evaluateJavaScript executes undefined function
我正在开发一个包含 WebView 的 Android 应用程序。
我正在尝试覆盖 onKeyDown activity 的方法。
我想在每次按下 phone 的后退按钮时调用一个 javascript 方法,如果该方法未定义,我想执行其他本机指令(我想关闭 activity).
是这个意思:我天生就是这样做的
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
if (true) {
webView.evaluateJavascript( "try{pageGoBack();}" +
"catch{window.JSInterface.noBackFunction();}",null);
webView.clearCache(true);
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
对于每个 jsp服务器端我想实现这样的东西:
<script>
function pageGoBack() {
---do something to go back---
}
}
</script>
...
每个 jsp 这个方法必须有相同的名称 "pageGoBack" 但可以有不同的内部代码
事实就是如此:在我使用 pageGoBack
方法加载其中一个 jsp 之前,一切正常(捕获错误 'undefined' 并执行 JSInterface 方法)。
当我加载其中一个页面的方法 "remains in cache (???)" 并且它总是被执行(也在那些没有它的页面中)。
(看我也加了webView.clearCache(true);
但是问题依旧)
谢谢 -
[已解决]
这不是 Android 的 WebView 或缓存的问题。那是javascript的问题。
当一个函数定义为 "global" 时,它在第一次计算时假定为全局范围。因此,当我第一次访问包含 pageGoBack() 的 .jsp 时,该函数变得全局可见。
我的案例的解决方案:
我有很多 jsp 带有这样的图形组件 ◄ 这意味着 "go back to the previous page"。我需要将当前页面的 -jquery 按钮点击功能关联到 Android 后退按钮。
所以我:
- 创建了一个空 css class .empty-class-for-back-button
- 将这个 class 给所有那些 ◄ 组件
- 像这样做了一个全局js函数
function pageGoBack() {
var backBtn = $('.empty-class-for-back-button');
if (backBtn.length > 0){
backBtn.tap();
}
else{
throw "css class not found";
}
}
- Android代码和我在问题中写的一样
如果当前页面中没有 ◄ 元素,现在可以正确抛出异常。
希望这对某人有所帮助。
我正在开发一个包含 WebView 的 Android 应用程序。 我正在尝试覆盖 onKeyDown activity 的方法。
我想在每次按下 phone 的后退按钮时调用一个 javascript 方法,如果该方法未定义,我想执行其他本机指令(我想关闭 activity).
是这个意思:我天生就是这样做的
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
if (true) {
webView.evaluateJavascript( "try{pageGoBack();}" +
"catch{window.JSInterface.noBackFunction();}",null);
webView.clearCache(true);
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
对于每个 jsp服务器端我想实现这样的东西:
<script>
function pageGoBack() {
---do something to go back---
}
}
</script>
...
每个 jsp 这个方法必须有相同的名称 "pageGoBack" 但可以有不同的内部代码
事实就是如此:在我使用 pageGoBack
方法加载其中一个 jsp 之前,一切正常(捕获错误 'undefined' 并执行 JSInterface 方法)。
当我加载其中一个页面的方法 "remains in cache (???)" 并且它总是被执行(也在那些没有它的页面中)。
(看我也加了webView.clearCache(true);
但是问题依旧)
谢谢 -
[已解决]
这不是 Android 的 WebView 或缓存的问题。那是javascript的问题。 当一个函数定义为 "global" 时,它在第一次计算时假定为全局范围。因此,当我第一次访问包含 pageGoBack() 的 .jsp 时,该函数变得全局可见。
我的案例的解决方案:
我有很多 jsp 带有这样的图形组件 ◄ 这意味着 "go back to the previous page"。我需要将当前页面的 -jquery 按钮点击功能关联到 Android 后退按钮。 所以我:
- 创建了一个空 css class .empty-class-for-back-button
- 将这个 class 给所有那些 ◄ 组件
- 像这样做了一个全局js函数
function pageGoBack() {
var backBtn = $('.empty-class-for-back-button');
if (backBtn.length > 0){
backBtn.tap();
}
else{
throw "css class not found";
}
}
- Android代码和我在问题中写的一样
如果当前页面中没有 ◄ 元素,现在可以正确抛出异常。
希望这对某人有所帮助。