如何从android直接执行javascript函数

时间:2018-10-15 06:10:41

标签: java android jquery webview

我有一个webview应用程序,几乎所有竞争内容都是使用jQuery AJAX函数加载的。我的问题是,当我单击移动后退按钮时,它没有走,而是关闭了应用程序或重新加载。 从我的网站上,我创建了一个jquery函数以返回并正常工作,因此我想到的是在具有先前保存URL的android代码内执行该函数。 所以我创建了JavascriptInterface,以便从jQuery FSAndroid.setAsycUrlInterface(url)获取先前的URL,但是我的问题是如何在jsBackAsync(from, url)的android代码中执行onKeyDown

这是我的JavascriptInterface类

public class AsyncInterface {
        Context iContext;
        AsyncInterface(Context contex) {
            iContext = contex;
        }

        @JavascriptInterface 
        public void setAsycUrlInterface(String geturl) {
            SharedPreferences prefs = getSharedPreferences(getPackageName(), MODE_PRIVATE);
            SharedPreferences.Editor edit = prefs.edit();
            edit.putString("lastAsyncUrl", geturl);
            edit.commit();
        }
    }

这是onKeyDown方法

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && shopwebview.canGoBack()) {
        shopwebview.goBack();
        /* Something like this i want to do
        SharedPreferences asyncprefs = getSharedPreferences(getPackageName(), MODE_PRIVATE);
        String lastAsyncUrlTab = asyncprefs.getString("lastAsyncUrl", "");
        if(!lastAsyncUrlTab.equals("")) {
            jsBackAsync("Android", lastAsyncUrlTab);
        }
        */
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

这是我的jquery代码

$(document).ready(function(){
    $('a.AsyncUrl').click(function(){
        var url = $(this).attr('href');
        FSAndroid.setAsycUrlInterface(url);
    });

    function jsBackAsync(from="button", url){
        if(from == 'Android'){
            /*Clear the back url or set new one here*/
            FSAndroid.setAsycUrlInterface(null);
        }
        $('#PageSet').load(url);
    }
});

0 个答案:

没有答案