4

我有以下 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 is not defined ”时会产生错误,因为 javascript 不会在调用 java 代码的上下文中执行。

是否可以在同一上下文中从 java 方法执行 JS,即在上述情况下使“i”可见?

在本例中,“i”是整数,但它可以是任何类型的对象。

谢谢。

4

2 回答 2

1

Suppose i is an integer,

function mine()

 {

var i = 3;

AndroidObject.call(i);

}

and

WebView myWebView;

public void call(Integer i)
{
Integer temp = i;
    runOnUiThread(new Runnable()
    {
        @Override
        public void run()
        {
            myWebView.loadUrl('javascript:alert(' + temp + ');');
        }
    });
}
于 2012-10-26T10:13:37.860 回答
0

I suggest you to create a function to get value of i if your i variable is global, like this:

var i = 20;

function getValueOfI() {
     return i;
}

and in your java code use something like this:

 myWebView.loadUrl('javascript:alert(getValueOfI());');

Updated If you want to achieve the same with local variables:

 function mine()
    {
        var i = 3;
        AndroidObject.call(i);
    }

where AndroidObject is javascript interface to java. It has method call

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 + ");");
        }
    });
}
于 2012-10-10T16:39:29.707 回答