AndroidWebView:从javascript调用的java方法执行javascript
我有以下javascript代码:AndroidWebView:从javascript调用的java方法执行javascript,javascript,android,webview,Javascript,Android,Webview,我有以下javascript代码: function mine() { var i = 3; AndroidObject.call(); } 其中AndroidObject是java的javascript接口。它有方法调用 WebView myWebView; public void call(final Integer i) { runOnUiThread(new Runnable() { @Overr
function mine()
{
var i = 3;
AndroidObject.call();
}
其中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 + ");");
}
});
}
在javascript中执行“i未定义”时,以下代码将产生错误,因为javascript不会在调用java代码的上下文中执行
是否可以在相同的上下文中从java方法执行JS,即使“i”在上述情况下可见
在本例中,“i”是整数,但它可以是任何类型的对象
谢谢。如果I变量是全局变量,我建议您创建一个函数来获取I的值,如下所示:
var i = 20;
function getValueOfI() {
return i;
}
myWebView.loadUrl('javascript:alert(getValueOfI());');
在java代码中使用如下内容:
var i = 20;
function getValueOfI() {
return i;
}
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 + ");");
}
});
}
假设我是一个整数
function mine()
{
var i = 3;
AndroidObject.call(i);
}
及
为什么
i
在那里?你能发布你的alert()
函数吗?当然,它可以处理全局变量:),但问题主要是在没有全局变量的情况下如何处理。对不起,我忘了说“I”可以是任何类型,而不仅仅是整数。我编辑了这个问题。如果我们在C#,我们可以使用dynamic关键字动态检测“I”的类型。但在这里我们可以使用对象,不是吗?重载方法肯定有效。尽可能多地定义对象的类型。如果这是Javascript对象,如函数,我该怎么办?:)我指的是任何javascript对象。