我发现这个问题是个误会。我相信安装a
ServiceWorkerClient可以让我拦截来自应用程序中所有WebView的所有请求,而不管其域如何。事实并非如此。该
ServiceWorkerClient只调用
如果 网页视图安装了ServiceWorker了。然后,来自所有服务人员的所有服务人员请求都将汇集到
ServiceWorkerClient。这意味着,如果你想拦截所有的网页视图内的所有网络请求在您的应用程序,你也将需要重写
shouldInterceptRequest()您
WebViewClient为好。
package com.example.myapplication;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.webkit.ServiceWorkerClient;import android.webkit.ServiceWorkerController;import android.webkit.WebResourceRequest;import android.webkit.WebResourceResponse;import android.webkit.WebSettings;import android.webkit.WebView;import android.webkit.WebViewClient;import androidx.annotation.Nullable;public class MainActivity extends Activity { private final static String LOGTAG = MainActivity.class.getSimpleName(); private WebView mWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ServiceWorkerController swController = ServiceWorkerController.getInstance(); swController.setServiceWorkerClient(new ServiceWorkerClient() { @Override public WebResourceResponse shouldInterceptRequest(WebResourceRequest request) { Log.e(LOGTAG, "in service worker. isMainframe:"+request.isForMainframe() +": " + request.getUrl()); return null; } }); swController.getServiceWorkerWebSettings().setAllowContentAccess(true); setContentView(R.layout.activity_main); mWebView = (WebView) findViewById(R.id.activity_main_webview); WebSettings webSettings = mWebView.getSettings(); WebView.setWebContentsDebuggingEnabled(true); webSettings.setJavascriptEnabled(true); mWebView.setWebViewClient(new WebViewClient() { @Nullable @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { Log.e(LOGTAG, "in webview client. isMainframe:"+request.isForMainframe() +": " + request.getUrl()); return super.shouldInterceptRequest(view, request); } }); Log.e(LOGTAG, "about to load URL"); //service worker handler only invoked on pages with service workers mWebView.loadUrl("https://developers.google.com/web/fundamentals/primers/service-workers/"); } @Override public void onBackPressed() { if(mWebView.canGoBack()) { mWebView.goBack(); } else { super.onBackPressed(); } }}


