在 webview 中添加广告拦截

Add adblock in webview

我正在尝试在我的片段中添加 adblock,当我尝试 inisialize webview 时,我在 new AdBlockerWebView.init(this).initializeWebView(webView);

上有下划线 this
package com.example.bottomnavigationview;

import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebResourceResponse;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import com.monstertechno.adblocker.AdBlockerWebView;
import com.monstertechno.adblocker.util.AdBlocker;

public class Fragment2 extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment2,container,false);
        View v = inflater.inflate(R.layout.fragment2,container,false);
        WebView webView = (WebView)v.findViewById(R.id.webView);
        new AdBlockerWebView.init(this).initializeWebView(webView);
        webView.setWebViewClient(new Browser_home());
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient());
        webView.loadUrl("https://cyber.sports.ru/dota2/match/");
        webView.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View view, int i, KeyEvent keyEvent) {
                if (keyEvent.getAction() == KeyEvent.ACTION_DOWN) {
                    if (keyEvent.getKeyCode() == KeyEvent.KEYCODE_BACK){
                        if(webView != null){
                            if (webView.canGoBack()){
                                webView.goBack();
                            } else {
                                getActivity().onBackPressed();
                            }
                        }
                    }
                }
                return true;
            }
        });
        return v;
    }

我需要把新行 AdBlockerWebView.init(this).initializeWebView(webView); 放在哪里来修复我的错误?

什么参数采用 init(...) 方法?我打赌它是 Context,所以你可以在 ActivityService 和其他 类 扩展 Context 中使用 this。但是 Fragment 没有扩展 Context,没有自己的,正在使用父 Activity 的上下文,所以在那里你可以使用例如requireContext()webView.getContext() 作为 init 方法的参数

new AdBlockerWebView.init(webView.getContext()).initializeWebView(webView);

假设您正在使用 THIS