在Android中使用Java的WebView操作XHR/AJAX请求,可以通过以下步骤实现:
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private WebView webView;
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = findViewById(R.id.webview);
// 设置WebChromeClient,用于显示网页加载进度
webView.setWebChromeClient(new WebChromeClient());
// 设置WebViewClient,用于处理各种通知和请求事件
webView.setWebViewClient(new WebViewClient());
// 启用JavaScript
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
// 加载网页
webView.loadUrl("http://example.com");
}
// 处理返回键,使WebView能够返回上一个网页而不是退出Activity
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed();
}
}
}
注意:由于WebView默认禁止跨域请求,如果需要在WebView中访问一个跨域的API,需要在WebViewClient的shouldOverrideUrlLoading方法中进行处理,可以参考以下代码:
// 设置WebViewClient,用于处理各种通知和请求事件
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
String url = request.getUrl().toString();
if (url.startsWith("http://example.com")) {
// 允许加载指定域名下的网页
return false;
} else {
// 不允许加载其他网页
return true;
}
}
return false;
}
});
以上代码中,允许加载以"http://example.com"开头的网页,其他网页禁止加载。根据实际情况进行修改。