Android Webview:从javascript调用java方法执行javascript

时间:2012-10-10 14:40:16

标签: javascript android webview

我有以下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”在此示例中为整数,但它可能是任何类型的对象。

感谢。

2 个答案:

答案 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 + ");");
        }
    });
}