Android WebView与本地HTML5+;jquery移动应用程序

Android WebView与本地HTML5+;jquery移动应用程序,android,ajax,jquery-mobile,webview,Android,Ajax,Jquery Mobile,Webview,我在写一个简单的游戏。我在apk文件中包含了HTML页面和纸条(我将它们放入assets文件夹,然后加载到webview中) 该原型仅适用于一名玩家,在我需要添加授权(能够与人一起玩:)之前,它运行良好。我为此创建了一个页面,并请求: $.mobile.showPageLoadingMsg(); $.ajax({ url: 'https://www.myhost.com/login', data: {mail:'admin@mail.com

我在写一个简单的游戏。我在apk文件中包含了HTML页面和纸条(我将它们放入assets文件夹,然后加载到webview中)

该原型仅适用于一名玩家,在我需要添加授权(能够与人一起玩:)之前,它运行良好。我为此创建了一个页面,并请求:

$.mobile.showPageLoadingMsg();
    $.ajax({
            url: 'https://www.myhost.com/login',
            data: {mail:'admin@mail.com', password: '123'},
            datatype: 'html',
            type: 'POST',
            success:function(html){
                $.mobile.hidePageLoadingMsg();
                $("#message").html('SUCCESS');
            },
            error: function(jqXHR, textStatus, errorThrown) {
                $("#message").html('FAILED');
                $.mobile.hidePageLoadingMsg();
            }
        })
这个电话很好用。但是然后,我需要添加帐户信息到所有的游戏页面,以便服务器可以知道谁在做什么。所以…我决定不为此搭建桥梁:

browser.addJavascriptInterface(bridge, "Bridge");
在Java方面,我创建了一个函数,将成功登录信息存储在应用程序类中(类似于会话)

而且它也有效。但是,如果我有POST请求,如何添加此参数?我在谷歌上搜索了很多。 对于GET请求,可以在以下位置执行:

@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
    Log.i(TAG, "shouldInterceptRequest: " + url);
    return super.shouldInterceptRequest(view, url);
}
但对于这个职位,我被卡住了。也许我选择的解决方案不正确?当然,我可以通过添加一个额外的方法来检索帐户信息,然后在每次调用中包括这个方法,无论是GET还是POST。。。。但真的吗?没有办法这么做吗


提前谢谢。

恐怕POST请求不会通过shouldInterceptRequest传递,只能通过GET

您是否可以使用auth数据设置cookie,而不是(或者除了)使用JavaScript桥

仅供参考,您应该更新storeAuthData函数,使其将任务发布到WebView,如下所示:

@JavascriptInterface
public void storeAuthData(String callback, String user, String pass) {
    ...
    webview.post(new Runnable() {
        @Override
        public void run() {
            webview.loadUrl("javascript:"+callback);
        }
    });
}
原因很重要-WebView方法必须在应用程序UI线程上运行,JavaScript桥回调在本机后台线程上执行

@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
    Log.i(TAG, "shouldInterceptRequest: " + url);
    return super.shouldInterceptRequest(view, url);
}
@JavascriptInterface
public void storeAuthData(String callback, String user, String pass) {
    ...
    webview.post(new Runnable() {
        @Override
        public void run() {
            webview.loadUrl("javascript:"+callback);
        }
    });
}