Android WebView与本地HTML5+;jquery移动应用程序
我在写一个简单的游戏。我在apk文件中包含了HTML页面和纸条(我将它们放入assets文件夹,然后加载到webview中) 该原型仅适用于一名玩家,在我需要添加授权(能够与人一起玩:)之前,它运行良好。我为此创建了一个页面,并请求: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
$.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);
}
});
}