Saya ingin dapat mendeteksi apakah pengguna menggunakan perangkat lunak adblocking ketika mereka mengunjungi situs web saya. Jika mereka menggunakannya, saya ingin menampilkan pesan yang meminta mereka untuk mematikannya untuk mendukung proyek, seperti yang dilakukan situs web ini.
Jika Anda masuk ke situs itu dan browser Anda mengaktifkan beberapa jenis perangkat lunak adblock, maka situs tersebut bukannya menampilkan iklan yang sebenarnya menunjukkan spanduk kecil yang memberi tahu pengguna bahwa pendapatan iklan digunakan untuk hosting proyek dan mereka harus mempertimbangkan mematikan Adblock .
Saya ingin melakukannya di situs web saya, saya menggunakan iklan adsense di atasnya, Bagaimana saya bisa melakukannya?
Jawaban:
Solusi saya tidak spesifik untuk jaringan iklan tertentu dan sangat ringan. Saya sudah menjalankannya dalam produksi selama beberapa tahun. AdBlock memblokir semua URL yang mengandung kata "iklan". Jadi ini yang saya lakukan:
Saya menambahkan file js kecil ke webroot saya dengan nama
ads.js
Ini adalah satu-satunya baris kode dalam file itu
Kemudian di suatu tempat di halaman saya:
File seperti ads.js diblokir oleh setidaknya adblocker ini di Chrome:
Pembaruan pada 2019-02-15:
Menambahkan Ghostery dalam daftar di atas karena ekstensi sekarang juga memblokir permintaan ke ads.js. Sangat berguna. Apakah ini berarti Ghostery benar-benar membantu kami para devs untuk mendeteksi pemblokiran iklan dengan ekstensi mereka?
Tidak bekerja dengan:
Badger Privasi
sumber
js/ads.js
tolong? karena saya di blogger saya harus mengunggah di.js
suatu tempat (seperti: Google Drive) dan tautan dalam hal itu tidak mengandungads
. Akan sangat membantu jika Anda memberikan tautan file Anda.Bukan jawaban langsung, tapi saya meletakkan pesan di belakang iklan untuk dimuat ... daripada mencoba untuk mendeteksinya, itu hanya akan muncul ketika iklan tidak.
sumber
http://thepcspy.com/read/how_to_block_adblock/
Dengan jQuery:
Tentu saja, Anda harus memiliki halaman arahan untuk AdblockNotice.html, dan kelas .myTestAd perlu mencerminkan wadah iklan Anda yang sebenarnya. Tetapi ini seharusnya berhasil.
EDIT
Seperti yang direkomendasikan TD_Nijboer, cara yang lebih baik adalah menggunakan
:hidden
:visible
pemilih (atau , seperti yang saya gunakan di bawah) sehinggadisplay: none
juga diperiksa:Tentu saja, kedua hal ini dapat digabungkan menjadi satu
if
blok jika diinginkan.Perhatikan bahwa
visibility: hidden
tidak akan ditangkap juga (tempat ruang tata letak tetap, tetapi iklan tidak terlihat). Untuk memeriksanya, filter lain dapat digunakan:Yang akan memberi Anda serangkaian elemen iklan yang "tidak terlihat" (dengan
0
teori yang lebih besar daripada masalah, secara teori).sumber
Redirecting in this case is a bad idea. If your advertising service goes down, all visitors could be redirected to that page.
Memang. Belum lagi bahwa mereka hanya akan menyusun naskah sederhana untuk mengalahkan langkah balasan. Selain itu, apakah Anda benar-benar yakin bahwa dengan menjadi agresif dan kuat bahwa pengguna akan termotivasi untuk menonaktifkan pemblokir iklan mereka? Tidak, semua itu akan membuat mereka kesal dan membuat mereka kesal terhadap situs Anda. Sebagian besar situs memilih untuk hanya menampilkan pesan daripada bermusuhan.Tidak ada permintaan tambahan. Tidak ada perpustakaan eksternal. JavaScript yang sederhana dan sederhana:
Kredit ke posting Christian Heilmann ini , saya pikir itu jauh solusi terbaik untuk mendeteksi AdBlock.
sumber
testAd.style.display = 'absolute'
dan memindahkannya dari layar<div id="detect" class="ads ad adsbox doubleclick ad-placement carbon-ads" style="background-color:red;height:300px;width:300px;position: absolute;left:0;top:0;"> </div>
(tentu saja setelah pengujian css harus diubah menjadi<div id="detect" class="ads ad adsbox doubleclick ad-placement carbon-ads" style="height:1px;width:1px;position: absolute;left:-999px;top:-999px;"> </div>
)absolute
adalah sebuahposition
nilai.window.onload
fungsiSebagian besar iklan dimuat secara dinamis dalam javascript. Saya hanya menggunakan acara onerror untuk mendeteksi apakah skrip iklan dapat dimuat atau tidak. Tampaknya bekerja.
Contoh dengan GoogleAds:
Ini dapat digunakan pada elemen lain juga untuk melihat apakah pemblokir iklan memblokir konten. Metode ini dapat menghasilkan false positive jika elemen jarak jauh tidak ada atau tidak dapat dijangkau.
sumber
offsetHeight
Untuk mendeteksi apakah pengguna memblokir iklan, yang harus Anda lakukan adalah menemukan fungsi di javascript iklan dan mencoba mengujinya. Tidak masalah metode apa yang mereka gunakan untuk memblokir iklan. Begini tampilannya untuk iklan Google Adsense:
Metode ini diuraikan di sini: http://www.metamorphosite.com/detect-web-popup-blocker-software-adblock-spam
sumber
typeof
adalah overhead jika Anda memeriksa properti objek. Gunakan yang sederhana=== undefined
.Solusi termudah saya dengan jquery adalah:
advertisement.js tidak mengandung apa-apa. Ketika seseorang menggunakan adblock, itu gagal dan fungsinya dipanggil.
sumber
Saya tahu sudah ada jawaban yang cukup, tetapi karena pertanyaan ini muncul di Google mencari "deteksi adblock" pada topik, saya ingin memberikan beberapa wawasan jika Anda tidak menggunakan adsense .
Khususnya, dengan contoh ini Anda dapat mendeteksi apakah daftar Adblock default yang disediakan oleh Firefox Adblock digunakan. Dibutuhkan keuntungan bahwa dalam daftar blokir ini ada elemen yang diblokir dengan id CSS
#bottomAd
. Jika saya memasukkan elemen seperti itu di halaman dan menguji tingginya, saya tahu apakah adblocking aktif atau tidak:Sisanya dilakukan melalui tersangka jQuery yang biasa:
Seperti yang bisa dilihat, saya menggunakan
setTimeout
setidaknya 1ms. Saya telah menguji ini pada berbagai browser dan sebagian besar waktu, secara langsung memeriksa elemen diready
selalu kembali 0; tidak masalah apakah adblocker aktif atau tidak. Saya punya dua ide tentang ini: rendering belum selesai atau Adblock belum masuk. Saya tidak repot-repot menyelidiki lebih lanjut.sumber
.is(":hidden")
tergantung pada apakah tinggi dan lebar adalah nol. Jika Anda hanya mengatur tinggi ke 0, tetapi div masih menempati lebar, maka itu tidak dianggap "disembunyikan" oleh jQuery. Jadi, apakah Anda dapat mengatakan,.is(":hidden")
agak tergantung pada bagaimana adblocker memutuskan untuk mengubah ukuran / menyembunyikan konten.Saran saya adalah: jangan lakukan itu!
Setiap skenario di mana Anda memperlakukan orang sebagai "orang yang salah" akan mengakibatkan mereka membalas.
Ini proposal saya.
Letakkan pesan kecil yang tidak mengganggu di bagian atas halaman (terlepas dari apakah iklan diblokir) dengan teks
I *totally* respect your right to block ads
dan tautan ke halaman lain / sembulan yang berjudulRead more ...
.Di halaman lain, jelaskan bahwa Anda memahami itu komputer mereka dan mereka bebas menggunakan pemblokiran iklan.
Juga membuatnya jelas dengan cara yang tidak menuduh bahwa penggunaan pemblokir ini membuat Anda lebih sulit untuk mengirimkan konten yang hebat (menjelaskan mengapa secara rinci) dan itu, sementara Anda lebih suka pemblokiran iklan tidak terjadi di situs Anda, itu sepenuhnya keputusan mereka. Fokus pada hal positif dari mematikan pemblokiran.
Mereka yang menentang keras iklan akan mengabaikan ini, tetapi Anda tidak pernah memiliki kesempatan untuk meyakinkan mereka. Mereka yang acuh tak acuh mungkin akan terombang-ambing oleh banding Anda karena Anda tidak melakukan semuanya "biarkan saya mengambil jalan saya atau saya akan mengambil bola saya dan pulang" hal yang jujur harus menjadi domain eksklusif anak-anak berusia lima tahun.
Ingat, tidak ada yang memegang pistol di kepala Anda dan memaksa Anda untuk meletakkan barang-barang Anda di internet. Perlakukan pembaca / pengguna Anda dengan hormat dan Anda mungkin akan menemukan banyak dari mereka akan membalas.
sumber
Mereka memanfaatkan fakta bahwa kode iklan Google menciptakan iframe dengan id "iframe". Jadi selama Anda belum memiliki sesuatu di halaman Anda dengan ID itu, ini akan bekerja untuk Anda juga.
sumber
Cukup tambahkan skrip kecil di situs Anda:
Dengan nama adsbygoogle.js
Kemudian lakukan hal berikut:
Temukan solusi ini di sini
sumber
Saya perhatikan komentar sebelumnya menggunakan google adsense sebagai objek untuk menguji. Beberapa halaman tidak menggunakan adsense, dan menggunakan blok adsense sebagai ujian bukanlah ide yang baik. Karena blok adsense dapat membahayakan SEO Anda. Berikut adalah contoh bagaimana saya mendeteksi kelas sederhana yang diblokir oleh adblocker:
Html:
Jquery:
"ablockercheck" adalah ID yang blok adblocker. Jadi, periksa apakah terlihat Anda dapat mendeteksi apakah adblocker dihidupkan.
sumber
AdBlock tampaknya memblokir pemuatan file JavaScript AdSense (dll). Jadi, jika Anda menggunakan versi iklan AdSense yang tidak sinkron, Anda dapat memeriksa apakah
adsbygoogle
adaArray
. Ini harus diperiksa setelah beberapa detik karena skrip asinkronnya adalah ... asinkron. Berikut ini garis besarnya :Untuk memperjelas, berikut adalah contoh tampilan kode iklan asinkron AdSense:
Perhatikan bahwa
adsbygoogle
diinisialisasi sebagai Array. Theadsbygoogle.js
library perubahan array ini keObject {push: ...}
ketika dijalankan. Memeriksa jenis variabel setelah waktu tertentu dapat memberi tahu Anda jika skrip dimuat.sumber
Pendekatan ini saya gunakan di situs saya, mungkin Anda akan merasa terbantu. Menurut pendapat saya, itu adalah simpliest solusi.
AdBlocker memblokir kelas dan elemen html tertentu, dengan memeriksa pemilih ini dari semua iklan yang diblokir di konsol pengembang (semuanya terdaftar), Anda dapat melihat elemen mana yang akan selalu diblokir.
Misalnya, cukup periksa halaman pertanyaan ini pada stackoverflow dan Anda akan melihat banyak iklan yang diblokir.
Misalnya, setiap elemen dengan
bottom-ad
kelas diblokir secara otomatis.bottom-ad
kelas:<div class="bottom-ad" style="width: 1px; height: 1px;">HI</div>
$('.bottom-ad').css('display') == "none"
atau bahkan lebih baik dengan menggunakan$('.bottom-ad').is(':visible')
Jika nilainya
true
, maka AdBlocker aktif.sumber
Anda tidak perlu permintaan HTTP tambahan, Anda cukup menghitung tinggi dari add palsu.
Ngomong-ngomong, berikut adalah daftar lengkap yang cocok dengan elemen-elemen yang dihindari oleh adblockers.
sumber
cara yang aman adalah membungkus iklan Anda di dalam
<div>
dan memeriksa tingginyaini bekerja dengan adblock plus dan bluehell firewall.
sumber
Cara yang efisien untuk memeriksa apakah ada adblock: Cukup periksa apakah ada adblock yang diaktifkan dengan mencoba memicu URL iklan google. Jika ya maka jalankan callback_has_adblock, jika tidak maka jalankan callback_no_adblock. Solusi ini lebih mahal satu permintaan tetapi setidaknya berhasil:
Solusi ini berfungsi untuk semua jenis iklan, tidak hanya google adsense.
sumber
Terlepas dari usia pertanyaan ini, saya baru-baru ini merasa sangat berguna dan karena itu hanya dapat berasumsi ada orang lain yang masih melihatnya. Setelah mencari di sini dan di tempat lain saya menduga bahwa tiga sisi utama klien memeriksa secara tidak langsung mendeteksi pemblokir iklan adalah untuk memeriksa diblokir
div
/img
, diblokiriframe
, dan diblokir sumber daya (file javascript).Mungkin itu di atas atau paranoid tetapi mencakup untuk sistem pemblokiran iklan yang hanya memblokir satu atau dua dari seleksi dan karenanya mungkin tidak tercakup seandainya Anda hanya melakukan satu pemeriksaan.
Pada halaman Anda menjalankan cek tambahkan: (Saya menggunakan jQuery)
dan tambahkan berikut ini di tempat lain di halaman:
Saya menggunakan div dengan nama umpan serta gambar yang dihosting secara eksternal dengan teks "Iklan" dan dalam dimensi yang digunakan oleh AdSense (terima kasih kepada placehold.it!).
Dalam
advertisement.js
Anda harus menambahkan sesuatu ke dokumen yang dapat kita periksa nanti. Meskipun sepertinya Anda melakukan hal yang sama seperti sebelumnya, Anda sebenarnya memeriksa file (advertisement.js
) itu sendiri sedang dimuat, bukan output.Dan kemudian script deteksi pemblokir iklan yang menggabungkan semuanya
Ketika dokumen sudah siap , yaitu markup dimuat, kami juga menambahkan iframe ke dokumen. Kemudian, ketika jendela dimuat , yaitu konten termasuk. gambar dll dimuat, kami memeriksa:
advertimsent.js
itu tidak diblokir.Dan gaya:
Semoga ini membantu
sumber
Jika menggunakan kode AdSense baru, Anda dapat melakukan pemeriksaan mudah, tanpa menggunakan konten atau cek css.
Tempatkan iklan Anda seperti biasa di markup Anda:
Kemudian Anda memanggil kode adsense di bagian bawah halaman Anda (perhatikan jangan menggunakan
"async"
bendera saat memanggiladsbygoogle.js
skrip):Kemudian tambahkan potongan kecil kode di bawah ini:
AdSense selalu menciptakan / set bendera
adsbygoogle.loaded
untuktrue
saat iklan dimuat, Anda dapat menempatkan cek dalam fungsi setTimeout untuk menunda pemeriksaan oleh beberapa detik.sumber
Sebagian besar adblocker membatalkan permintaan HTTP ke
ads.js
dan membuat0px
elemen, tetapi adblocker terkadang menghapus DOM , dan beberapa jawaban di atas akan gagal karena tidak memeriksa keberadaan elemen.Menggunakan
setTimeout()
adalah praktik yang baik karena tanpa itu, akan membuat skrip berlomba dengan adblocker.Script di bawah ini akan memeriksa apakah dom ada / dihapus dan memeriksa
offsetHeight
elemen jika ada.sumber
Semua jawaban di atas valid, namun sebagian besar tidak akan berfungsi untuk pemblokiran iklan tingkat DNS.
Pemblokir iklan tingkat DNS (seperti lubang-piPemblokir ) pada dasarnya mengembalikan NXDOMAIN (domain tidak ada) untuk daftar domain pemblokiran iklan (mis. Telemetry.microsoft.com akan "tidak ada" ketika itu terjadi).
Ada beberapa cara untuk menghindari ini:
Metode A : Permintaan iklan berdasarkan alamat ip, bukan domain.
Metode ini sedikit mengganggu karena Anda harus melacak alamat ip. Ini akan bermasalah jika kode Anda tidak dirawat dengan baik atau diperbarui secara teratur.
Metode B : Blokir semua permintaan yang gagal - bahkan jika klien melaporkan NXDOMAIN.
Ini akan sangat menyebalkan bagi pengguna jika itu adalah NXDOMAIN yang "sah".
sumber
dan dalam file getbanner.cfm:
Saya pikir ini cara termudah untuk mendeteksi adblock.
sumber
true
selaluInilah yang bekerja untuk saya:
sumber
Saya tahu ini sudah dijawab, tetapi saya melihat situs sampel yang disarankan, dan saya melihat mereka melakukannya seperti ini:
sumber
Tidak perlu untuk timeout dan mengendus DOM. Cobalah untuk memuat skrip dari jaringan iklan populer, dan lihat apakah pemblokir iklan mencegat permintaan HTTP.
sumber
Baru saja membuat "plugin" saya sendiri untuk menyelesaikan ini dan berfungsi dengan sangat baik:
adBuddy + jsBuddy:
ADBuddy JSBuddy GitHub
Saya menambahkan kompatibilitas seluler dan deteksi jsBlocking antara lain ... (Seperti hamparan yang diperlihatkan kepada pengguna yang meminta mereka untuk menonaktifkan adBlocking / jsBlocking perangkat lunak ); Juga membuatnya ramah responsif.
Ini open source di bawah Lisensi Coffeeware .
sumber
Saya memahami ketegangan Anda dan Anda dapat memeriksa apakah elemen telah dibuat oleh skrip atau elemen disembunyikan. Dan jika kita berbicara tentang pemblokiran iklan, Anda hanya dapat mengandalkan visibilitas elemen, bukan pada kehadiran elemen.
Elemen yang dibuat dengan skrip pihak ketiga tidak akan pernah ada, bahwa jika skrip tidak dapat dijangkau saat ini (kesalahan DNS, kesalahan server web jarak jauh, preload halaman web offline, dll), dan Anda akan selalu mendapatkan false positive.
Semua jawaban lain dengan cek sudah benar, tetapi ingatlah ini.
sumber
timing's
Jawabannya bagus dipikirkan tetapi tidak berfungsi lagi, jadi saya telah memperbarui nama file js ke 'adsense' dari 'iklan' dan itu bekerja kembali seperti pesona!Ini kodenya, mungkin ini akan membantu seseorang:
Dalam file Js cantumkan baris ini:
var adblockDetecter = true;
sumber
Sekarang ada cara yang lebih baik untuk melakukannya menggunakan skrip JS sederhana yang disebut AdBlock Detector
Berikut cara menggunakannya:
Tambahkan ini ke
<head>
bagian Anda :Sekarang Anda dapat menggunakan
ab-message
id di mana pun Anda ingin menampilkan pesan kepada pengguna AdBlock:Perhatikan gaya sebaris yang ditambahkan untuk menyembunyikannya semula (Tentu saja, Anda juga dapat melakukan ini dari file CSS Anda sendiri).
Perlu diketahui juga bahwa diperlukan 500 ms, itu karena harus menunggu adblocker untuk melakukan sesuatu atau tidak akan berfungsi.
Sedikit penjelasan tentang cara kerja skrip ini
Pertama, ia menambahkan iframe dengan sumber tautan yang dibuat secara acak. (Ini dihasilkan secara acak karena beberapa adblock cerdas, pada titik tertentu, mereka menyadari bahwa tautan itu palsu).
Kemudian ia menjalankan beberapa pemeriksaan pada iframe itu (jika berhasil dimuat atau jika gayanya dimodifikasi). Jika salah satu dari tes ini benar, maka akan ditampilkan
ab-message
elemen untuk adblock pengguna.Skrip ini berfungsi untuk sebagian besar (jika tidak semua) pemblokir iklan.
TAMBAHAN
Tidak ada gunanya, sungguh, bisa saja menciptakan intisari, tetapi sebaliknya saya membuat proyek Github, tapi tetap saja, periksa dan beri bintang jika itu membantu Anda.
abDetector: Detektor AdBlock JavaScript vanilla sederhana.
Nikmati.
sumber
Anda dapat memeriksa ini mungkin membantu mendeteksi-adblocker
Ini merupakan implementasi dari jawaban waktu
Tambahkan ini sebelum skrip apa pun di tag kepala:
Kemudian, gunakan itu:
sumber
window.adblocker
di konsol peramban Anda jika kembalitrue
maka adblocker diaktifkan jika tidak maka akan kembalifalse
Anda dapat memeriksa dokumentasi lengkap deteksi-adblocker