AndroidWebView:从javascript调用的java方法执行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

我有以下javascript代码:

    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对象。