我有以下javascript代码:
function mine()
{
var i = 3;
AndroidObject.call();
}
其中 AndroidObject 是java的javascript接口。它有方法调用
WebView myWebView;
public void call()
{
runOnUiThread(new Runnable()
{
@Override
public void run()
{
myWebView.loadUrl('javascript:alert(i);');
}
});
}
以下代码在javascript中执行“ i未定义”时会产生错误,因为javascript将不会在调用java代码的上下文中执行。
是否可以在相同的上下文中从java方法执行JS,即在上面的情况下使“i”可见?
“i”在此示例中为整数,但它可能是任何类型的对象。
感谢。
答案 0 :(得分:1)
假设我是一个整数,
function mine()
{
var i = 3;
AndroidObject.call(i);
}
和
WebView myWebView;
public void call(Integer i)
{
Integer temp = i;
runOnUiThread(new Runnable()
{
@Override
public void run()
{
myWebView.loadUrl('javascript:alert(' + temp + ');');
}
});
}
答案 1 :(得分:0)
如果您的i变量是全局变量,我建议您创建一个函数来获取 i 的值,如下所示:
var i = 20;
function getValueOfI() {
return i;
}
并在您的java代码中使用以下内容:
myWebView.loadUrl('javascript:alert(getValueOfI());');
<强>更新强> 如果你想用局部变量实现相同的目的:
function mine()
{
var i = 3;
AndroidObject.call(i);
}
其中AndroidObject是java的javascript接口。它有方法调用
WebView myWebView;
public void call(final Integer i)
{
runOnUiThread(new Runnable()
{
@Override
public void run()
{
myWebView.loadUrl("javascript:alert(" + i + ");");
}
});
}
public void call(final String i)
{
runOnUiThread(new Runnable()
{
@Override
public void run()
{
myWebView.loadUrl("javascript:alert(" + i + ");");
}
});
}
public void call(final Boolean i)
{
runOnUiThread(new Runnable()
{
@Override
public void run()
{
myWebView.loadUrl("javascript:alert(" + i + ");");
}
});
}