Android- using addJavaScriptInterface to return a value from Javascript

后端 未结 3 2024
猫巷女王i
猫巷女王i 2020-12-30 14:50

So i know there are other posts addressing the same issue, and I think I\'ve followed them to the letter but alas to no avail. I\'m trying to learn how to get my app to int

相关标签:
3条回答
  • 2020-12-30 15:28

    I do it by utilizing the onLoadResource in my Webview class.

    Html page:

    <html>
    <head>
    function Submit(){
    
            var username = $('#username').val();
            var urlNew = 'processing.php';
            urlNew = urlNew + '?' + 'username=' + username;
            $('#submit').attr('href', urlNew);
    
            return true;
        }
    </head>
    <body>
        <form>
            <input id="username" name="username" type="text" />
            <a href="" id="submit" onclick="return Submit();" ><img  src="images/button.png" /></a>
         </form>
    </body>
    </html>
    

    So then in my onLoadResource I listen for that url:

    public void onLoadResource(WebView view, String url)
            {
                if(url.contains("http://domain.com/processing.php")){
    
    //process the url and suck out the data
    
    }
    

    This might not be what you need, but there were reasons I had to do it this way so figured it may help you. Also note that I didn't do form submit, I did <a> submit, thats because the onLoadResource won't pick up the form submit.

    Edit: This might help.

    0 讨论(0)
  • 2020-12-30 15:32

    Try enabling javascript on your webview :

    mWebview.getSettings().setJavaScriptEnabled(true);
    
    0 讨论(0)
  • 2020-12-30 15:45

    This may not be correct, I will have to double check but it may be due to the reference being lost..

    Try making your ClsAccessor reference a member level one..

    public class JSExample extends Activity {
        ...
        ClsAccessor _accessor = new ClsAccessor();
        ...
        public void onCreate(Bundle savedInstanceState) {
            ...
            mWebView.addJavascriptInterface(_accessor, "accessor");
            ...
    

    Also if you debug line by line does setValue() ever get called in managed code?

    For what it is worth, I have code that is doing as I have described above and the script to managed interface works fine, however I am not in a position currently to test and see if not having a reference to the class also works.

    0 讨论(0)
提交回复
热议问题