それでも俺はアフィに抗ってみせる

chromiumが拡張API(主に広告ブロック関連)を制限する云々というニュースが流れたので、某巨大掲示板のアフィ嫌いたちが大騒ぎしていた。いやいや、そうはいってもBraveだってあるしねぇ……とか、まあ大丈夫だと考えている(*1)のだけど、chromium使って自前でアドブロックしちゃえばいいんじゃね?と思いついたので。

ベースとなるソースは過去のエントリから。
https://www.dobusarai.net/blog/chromium-web-browser2019/

            backGroundPanel.Controls.Add(chromium);
            chromium.Dock = DockStyle.Fill;
            chromium.LoadingStateChanged += Chromium_LoadingStateChanged;
            chromium.LoadError += Chromium_LoadError;
            chromium.FrameLoadEnd += Chromium_FrameLoadEnd; // これ追加
        }

        private async void Chromium_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) {
            // LoadStringForUrlが走るとここのChromium_FrameLoadEndも走って無限ループ
            // LoadStringForUrlの場合、HttpStatusCode=0なのでそれ以外で下記を実行
            if (e.HttpStatusCode != 0) {
                var source = "";
                await chromium.GetBrowser().MainFrame.GetSourceAsync().ContinueWith(
                    task => {
                        source = task.Result.ToString();
                    }
                );
                source = source.Replace("//affiliate.url.com/", "//127.0.0.1/");
                chromium.GetBrowser().MainFrame.LoadStringForUrl(source, e.Url);
            }
        }

ex) http://cefsharp.github.io/api/57.0.0/html/M_CefSharp_IFrame_LoadStringForUrl.htm

*1
まあAdGuardの有料垢持ってるのでいざとなったらデスクトップでも使うだけだしなー。というかこんなブラウザ作るよりもローカルプロキシ鯖作ったほうがパフォーマンスは良いのかな。その時はその時試すわー。