CefSharp Projesine Adblock Nasıl Önceden Kurulur?
Bu yazının İngilizcesi de var: How to pre-install adblock to the cefsharp project →

Bu yazı, yukarıdaki bağlantıda sorulan soruya çözüm arayanlar için hazırlandı.
Şunu söylemeliyim ki dünyanın dört bir yanından çok sayıda e-posta alıyorum, bu yüzden cevabı o günlerdeki bilgime göre açıklayacağım (… yıl 2016)
Kısacası CEF’e eklenti kurmanın kolay bir yolu yok. Google eklenti API’lerini kendi yöntemiyle yapıyor. Chrome, Chromium dalı üzerine kurulu ama Google Chrome
kendi tarayıcısı için özel olarak pek çok geliştirme yaptı. Elbette Chromium projesi üzerinde kendi eklenti yöneticinizi kurabilirsiniz. Bu durumda önce
bu bağlantıyı incelemeniz iyi olur. Bu bağlantıda adblock’u kendi başıma kurma çalışmamı göreceksiniz. Çalıştı ama Google’ın Chrome’undaki gibi beklediğim şekilde değil. Size biraz zaman kazandırsın diye paylaştım…
Özetle; kendimize özel bir reklam engelleme sistemi kurmak için Chromium sarmalayıcısı CEF’teki bir metodun arasına bir filtre koyduk.
Basit bir yol kullandık;
CefReturnValue IRequestHandler.OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
{
if (request.Url.Contains(“custom://”) || request.Url.Contains(“chrome-devtools://”) || request.Url.StartsWith(“https://”) || frame.Url ==“about:blank” || request.Url == “about:blank” || frame.Url == “” )//|| ExtractDomainNameFromURL_Method2(request.Url) == ExtractDomainNameFromURL_Method2(frame.Url))
return CefReturnValue.Continue;
if (ownerx.bioplusobj.adManager.isAd(request.Url))
{
BrowserView.browser.ExecuteScriptAsync(“console.error( ‘Relam Vevo Adblock tarafından engellendi. “ + request.Url + “’)”);
blockedUrls.Add(request.Url); return CefReturnValue.Cancel;
} return CefReturnValue.Continue;ü
}
//Admanager
using System;
using System.Collections.Generic;using System.IO;using System.Linq;using System.Reflection;using System.Text;using System.Threading.Tasks;namespace CefSharp.Wpf.Example.Controls
{ public class AdBlock
{ private static String TAG = “AdBlock”; private static String BLOCKED_DOMAINS_LIST_FILE_NAME = “hosts.txt”; private static String LOCAL_IP_V4 = “127.0.0.1”; private static String LOCAL_IP_V4_ALT = “0.0.0.0”; private static String LOCAL_IP_V6 = “::1”; private static String LOCALHOST = “localhost”; private static String COMMENT = “#”; private static String TAB = “\t”; private static String SPACE = “ “; private static String EMPTY = “”; public bool mBlockAds { get; set; }//abdlock aktif
// private static Locale mLocale = Locale.getDefault();
List<string> mBlockedDomainsList =new List<string>(); public List<string> BlockList { get; } public AdBlock()
{
mBlockAds = true;
} public bool isAd( String url) { if (!mBlockAds || url == null)
{ return false;
}
String domain; try
{
domain = getDomainName(url);
} catch (Exception ex)
{
Console.WriteLine( “URL ‘” + url + “’ is invalid” + ex.Message); return false;
} bool isOnBlacklist = mBlockedDomainsList.Contains(domain.ToLower(System.Globalization.CultureInfo.CurrentCulture)); //if (isOnBlacklist)
//{
// Log.d(TAG, “URL ‘” + url + “’ is an ad”);
//}
return isOnBlacklist;
} private static String getDomainName( String url)
{ int index = url.IndexOf(‘/’, 8); if (index != -1) {
url = url.Substring(0, index);
}
Uri uri = new Uri(url);
String domain = uri.Host; if (domain == null) { return url;
} return domain.StartsWith(“www.”) ? domain.Substring(4) : domain;
} public void getDomainNamesReady()
{ var executingAssembly = Assembly.GetExecutingAssembly(); var path = Path.GetDirectoryName(executingAssembly.Location);
FileInfo fi = new FileInfo(Path.Combine(path, “Pages\\src\\hosts.txt”)); // string filterText = objReader.ReadToEnd();
try
{ //noinspection IOResourceOpenedButNotSafelyClosed
String line; using (StreamReader reader = new StreamReader(fi.OpenRead(), Encoding.UTF8))
{ while (reader.Peek() >= 0)
{
line = reader.ReadLine(); if (!string.IsNullOrEmpty(line) && !line.StartsWith(COMMENT))
{
line = line.Replace(LOCAL_IP_V4, EMPTY)
.Replace(LOCAL_IP_V4_ALT, EMPTY)
.Replace(LOCAL_IP_V6, EMPTY)
.Replace(TAB, EMPTY); int comment = line.IndexOf(COMMENT); if (comment >= 0)
{
line = line.Substring(0, comment);
}
line = line.Trim(); if (!string.IsNullOrEmpty(line) && !line.Equals(LOCALHOST))
{ while (line.Contains(SPACE))
{ int space = line.IndexOf(SPACE);
String host = line.Substring(0, space);
mBlockedDomainsList.Add(host.Trim());
line = line.Substring(space, line.Length).Trim();
}
mBlockedDomainsList.Add(line.Trim());
}
}
}
}
} catch (IOException e)
{
Console.WriteLine( “(TAG, Reading blocked domains list from file ‘”
+ BLOCKED_DOMAINS_LIST_FILE_NAME + “’ failed.” + e.Message);
}
}
}
}
//Güncel engellenen reklam
listesini adblock web sitesinin dosyalarından alabilirsiniz. Ya da Chrome’unuzdaki eklenti veritabanında arayabilirsiniz.
Pages\\src\\hosts.txt”
Özetle iki yöntem paylaştım. Birincisi ideal olanı ama daha zor. İkincisi daha kolay ama daha basit.