1

This is html code.

<button class="rechangeMember">
        Recharge
    </button>
<script src="http://121.42.9.33:8080/statics/common/js/jquery.min.js"></script>
<script>
    $(function(){
        $('.rechangeMember').click(function(){
            if(typeof myObj != 'undefined')
            {
                myObj.rechargeMember();
            }
            else
            {
                rechargeMember();
            }
        });
    })
</script>

Then I want calling this button in Android, code below

member_level_show.getSettings().setJavaScriptEnabled(true);
    member_level_show.getSettings().setDomStorageEnabled(true);
    member_level_show.setWebChromeClient(new WebChromeClient());
    member_level_show.addJavascriptInterface(new Recharge(), "rechargeMember");
    member_level_show.loadUrl(Constants.URL_MEMBER_LEVEL + CurrentUserBean.getCurrentUser().getToken());

Recharge class

class Recharge{
    @JavascriptInterface
    private void rechargeMember() {
        log("recharge");
    }
}

then I click this button in webview, logcat is

"Uncaught ReferenceError: rechargeMember is not defined"
4
  • I don't know anything about Android, but should rechargeMember be public instead of private since it gets accessed from the outside? Commented Mar 5, 2017 at 15:53
  • @Bemmu Thank you for your answer, I have changed rechageMember to public but the log also changed to "Uncaught TypeError: rechargeMember is not a function". Commented Mar 5, 2017 at 15:59
  • OK, I hope someone else can help you :) Commented Mar 5, 2017 at 16:00
  • @Bemmu Thank you very much! I've solved my problem already. Commented Mar 5, 2017 at 16:04

2 Answers 2

1

My code is error.

class Recharge{
    @JavascriptInterface
    private void rechargeMember() {
        log("recharge");
    }
}

should be changed to

  class Recharge{
    @JavascriptInterface
    public void rechargeMember() {
        log("recharge");
    }
}

private can't be called outside, thank's for @Bemmu's comment.Second error is :

 member_level_show.addJavascriptInterface(new Recharge(), "rechargeMember");

"rechargeMember" should be "myObj", JavaScript code is:

<script>
$(function(){
    $('.rechangeMember').click(function(){
        if(typeof myObj != 'undefined')
        {
            myObj.rechargeMember();
        }
        else
        {
            rechargeMember();
        }
    });
})

So Android function is called.

Sign up to request clarification or add additional context in comments.

Comments

0

The name you specify in addJavaScriptInterface() becomes the name of the object. So you have to use

rechargeMember.rechargeMember();

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.