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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.