Abstrak: Artikel ini membahas bagaimana mengimplementasikan berbagai jendela pop-up menggunakan CodeBehind di ASP.NET dan berinteraksi dengan jendela pop-up. Ini juga membahas berbagai perilaku pemfilteran browser IE non-standar yang umum digunakan untuk jendela pop-up dan tindakan pencegahan yang sesuai untuk penggunaan jendela pop-up, untuk memberikan solusi universal dan lebih baik dalam menggunakan jendela pop-up.
Kata kunci: ASP.NET, CodeBehind, pemfilteran, antarmuka COM, JavaScript, pengikatan
Sebagai alat terbaru Microsoft untuk membangun situs Web dinamis, ASP.NET telah membuat kemajuan besar dalam mengubah metode pemrograman Web asli dibandingkan dengan ASP dan JSP. Teknologi pemisahan kode dan halamannya (CodeBehind) serta kontrol server Web yang lengkap memberi pemrogram metode pengembangan sisi server Web yang lebih sesuai dengan pemrograman tradisional. Namun, pemrograman Web masih memiliki karakteristik yang berbeda dari pemrograman tradisional. Karakteristik ini menentukan bahwa beberapa teknik khusus harus digunakan dalam pemrograman ASP.NET untuk melengkapi persyaratan program. Jendela pop-up merupakan representasi dari metode pemrograman jenis ini. Cukup banyak buku pemrograman yang diam tentang jendela pop-up atau hanya menyebutkannya dalam satu kata, sepertinya gagal memahami besarnya dunia penggunaan jendela pop-up. Artikel ini akan menyelesaikan sebagian besar masalah dalam menggunakan jendela pop-up untuk Anda.
Untuk meningkatkan konkurensi dan throughput akses situs web, ASP.NET, seperti skrip server lainnya, juga menggunakan skrip sisi klien untuk mengurangi tekanan pada server. ASP.NET tidak secara langsung mendukung jendela pop-up sampai sekarang (versi 1.1), dan jendela pop-up sisi klien harus digunakan melalui JavaScript (atau VBScript).
1. Jendela peringatan dan metode penggunaan skrip sisi klien di CodeBehind.
Untuk memunculkan jendela peringatan paling sederhana di browser, Anda dapat menggunakan pernyataan JavaScript:
window.alert([sMessage])
di mana sMessage adalah pesan prompt. Sayangnya, jendela pop-up seperti itu hanya memiliki tombol "OK" dan hanya berfungsi sebagai petunjuk. Jika kita ingin memunculkan jendela pop-up kueri saat menghapus catatan, Anda perlu menggunakan:
bConfirmed = window.confirm([sMessage])
di mana: bConfirmed adalah nilai kembalian dan sMessage adalah pesan prompt. Jendela pop-up ini memiliki dua opsi: "OK" atau "Menyerah", dan nilai pengembalian pilihannya ditempatkan di bConfirmed agar kode dapat membuat penilaian.
Untuk meningkatkan kegunaan kembali dan keterbacaan kode, JavaScript dan Codehind harus diintegrasikan satu sama lain. Biasanya ada dua cara untuk mencapai efek ini.
(1) Gunakan metode Response.Write:
Penggunaan metode Response.Write telah didukung sejak era ASP. Itu dapat menulis kode ke klien, yang merupakan metode yang sangat nyaman dan intuitif. Kode berikut menunjukkan cara menggunakan metode Response.Write untuk menampilkan pesan peringatan.
Sub Pribadi btAlert_Click(Pengirim ByVal Sebagai System.Object, ByVal dan Sebagai System.EventArgs) Menangani btAlert.Click
' Mendemonstrasikan metode Response.Write dan jendela peringatan.
Respon.Tulis(" ")
End Sub
(2) Gunakan metode RegisterXXX.
Jika Anda mengamati kode HTML yang dihasilkan oleh Response.Write, Anda akan menemukan bahwa kode yang dihasilkan oleh metode Response.Write ditulis di awal kode HTML, yaitu sebelum tagnya. Saat ini, semua objek HTML belum dibuat. Jika Anda ingin menggunakan dan berinteraksi dengan objek dalam HTML, kesalahan "objek tidak ditemukan" akan terjadi. Oleh karena itu penulis merekomendasikan metode yang lebih sesuai dengan metode CodeBehind yaitu menggunakan metode RegisterXXX. RegisterXXX mencakup: RegisterClientScriptBlock, RegisterStartupScript dan fungsi IsStartupScriptRegistered untuk penilaian.
Prototipe RegisterStartupScript adalah:
Sub RegisterStartupScript Publik yang Dapat Ditimpa( _
Kunci ByVal Sebagai String, _
Skrip ByVal Sebagai String _
)
di mana: kunci mewakili pengidentifikasi unik skrip ini, dan skrip adalah string yang mewakili skrip.
Prototipe RegisterClientScriptBlock sama dengan RegisterStartupScript. Perbedaan antara kedua fungsi tersebut adalah kode skrip yang dikandungnya ditulis ke lokasi berbeda dalam file HTML. RegisterClientScriptBlock mengeluarkan skrip klien segera setelah tag pembuka elemen objek Halaman, dan RegisterStartupScript mengeluarkan skrip sebelum tag penutup elemen objek Halaman. Jika skrip Anda memiliki pernyataan yang berinteraksi dengan objek halaman (objek dokumen) (ini akan terlihat pada contoh kami selanjutnya), disarankan untuk menggunakan RegisterStartupScript, sebaliknya jika Anda ingin skrip klien dieksekusi sedini mungkin mungkin, Anda dapat menggunakan RegisterClientScriptBlock. Atau Response.Write.
Untuk mencegah penambahan skrip berulang kali ke halaman, ReisterStartupScript/RegisterClientScriptBlock menggunakan kunci sebagai kunci registrasi saat mendaftarkan skrip, dan kemudian IsClientScriptBlockRegistered dapat digunakan untuk membuat penilaian dalam program.
Contoh berikut akan menggunakan RegisterClientScriptBlock untuk mendemonstrasikan penggunaan konfirmasi.
Sub Pribadi btConfirm_Click(Pengirim ByVal Sebagai System.Object, ByVal dan Sebagai System.EventArgs) Menangani btConfirm.Click
'Tunjukkan metode RegisterClientScriptBlock dan konfirmasi windowIf
(Bukan IsClientScriptBlockRegistered("clientScript")) Kemudian
'Tentukan apakah skrip sudah ditambahkan, jika belum, tambahkan.
Redupkan strScript Sebagai String
strScript = " "
'Daftar skripRegisterClientScriptBlock("clientScript", strScript)
'Jika Anda memilih "Tidak", lanjutkan eksekusi.
End If
End Sub
2. Munculkan halaman yang ditentukan.
Memiliki jendela prompt saja masih jauh dari memenuhi persyaratan kita. Dalam program ini, kita sering kali perlu memunculkan halaman yang ditentukan. Saat ini, Anda dapat menggunakan metode window.open JavaScript. Dengan metode RegisterClientSciptBlock sebelumnya, kita dapat memunculkan halaman yang ditentukan.
Kode berikut menunjukkan cara memunculkan halaman yang ditentukan:
Sub Pribadi btWinOpen_Click(Pengirim ByVal Sebagai System.Object, ByVal dan As System.EventArgs) Menangani btWinOpen.Klik
'Gunakan window.open dan registerStartupScript untuk demonstrasi sederhana.
Jika (Bukan IsClientScriptBlockRegistered("OpenScript")) Lalu
'Tentukan apakah skrip sudah ditambahkan, jika belum, tambahkan.
Redupkan strScript Sebagai String = " "
DaftarStartupScript("OpenScript", strScript)
Akhiri Jika
End Sub
menggunakan metode Window.open untuk memunculkan halaman baru, yang hanya memiliki satu parameter: alamat URL dari jendela pop-up baru. Ternyata metode window.open memiliki banyak parameter, tetapi ini adalah masalah javascript sederhana dan kami tidak akan membahas detailnya di sini. Jika Anda memiliki pertanyaan terkait, silakan periksa MSDN.
Program ini berfungsi dengan baik bila digunakan langsung di IE. Namun jika Anda menggunakan browser seperti GoSurf, MyIE2, NetCapter, dll., sayangnya! Anda tidak akan melihat pop-up. Inilah yang akan kita bahas tentang pemfilteran pop-up.
3. Diskusikan perilaku pemfilteran jendela pop-up pada browser IE non-standar.
Menjamurnya jendela iklan telah membuat banyak netizen tidak tahan lagi diganggu oleh iklan. Mereka sudah menyerah pada browser IE standar dan browser bekas seperti GoSurf, MyIE2, dan NetCapter yang menggunakan kernel IE untuk mendukung banyak halaman dan Perangkat Lunak yang secara otomatis memblokir iklan. Konon pada IE6 sp2 mendatang, Microsoft juga akan menambahkan fungsi pemblokiran jendela iklan. Hal ini tentu saja merupakan hal yang baik bagi sebagian besar pengguna Internet, namun bagi programmer, cara kita menggunakan jendela pop-up pada dasarnya tidak berbeda dengan iklan biasa. Jendela tersebut juga akan diblokir tanpa pandang bulu oleh pengelola jendela pop-up tentu saja kami tidak ingin melihatnya. Apakah ada cara standar untuk membuat jendela muncul secara normal? Ini mengharuskan kita memahami prinsip pemblokiran iklan oleh browser. Pemblokir iklan umum menggunakan tiga metode berikut untuk memfilter iklan:
(1) Metode pemblokiran berbasis judul jendela
Prinsip metode pemblokiran ini adalah memeriksa semua judul jendela IE secara berkala, lalu memfilternya berdasarkan daftar yang ada (dipelihara oleh daftar). program). Daftar array) untuk membandingkan, jika ada yang sama, kita tutup jendela ini. Jelas sekali, metode ini memiliki banyak kelemahan. Metode ini memblokir semua jendela pop-up dan terlalu ketat. Ini jarang digunakan dalam program. Namun, metode deformasi berdasarkan itu cukup umum. Artinya, teknologi pemfilteran cerdas berdasarkan nama judul jendela memblokir jendela pop-up berdasarkan apakah judul tersebut mengandung kata kunci yang terkait dengan iklan.
(2) Metode pemblokiran berdasarkan kelas jendela dan lokasi.
Setelah dianalisis, ditemukan bahwa nama kelas jendela penjelajahan normal adalah IEFRAME dan CabinetWClass, sedangkan nama kelas jendela periklanan adalah CabinetWClass. Analisis lebih lanjut menemukan bahwa: nilai rect.top kelas WorkerA di jendela iklan dan kelas Shell DocObject View adalah sama, tetapi nilai rect.top kelas WorkerA di jendela IE normal dan kelas Shell DocObject View berbeda. Berdasarkan dua poin di atas, Anda dapat menulis program pembunuh periklanan. Faktanya, saya skeptis terhadap generalisasi program ini. Karena penulis menggunakan Spy++ untuk menganalisa dan menemukan bahwa pada Windows2000 (sistem operasi yang digunakan penulis), kelas-kelas dari windows IE semuanya adalah IEFrame. Pada saat yang sama, karena Win2000 adalah sistem operasi berdasarkan kode Unicode, tidak ada kelas WorkerA dan digantikan oleh kelas WorkerW. Pada saat yang sama, tidak ada situasi di mana rect.top berbeda. Karena penulis tidak memiliki sistem operasi WindowsXP, saya tidak dapat melakukan eksperimen lebih lanjut pada WindowsXP.
(3) Metode pemblokiran berdasarkan komponen IE COM.
Kedua metode di atas memperlakukan jendela IE sebagai jendela Windows biasa dan membuat penilaian. Faktanya, IE adalah browser khas yang didasarkan pada komponen COM. Semua browser yang berbasis pada inti IE mengemas file shdocvw.dll dan kemudian menulis kode BHO yang sesuai. Hanya dengan cara ini kita dapat benar-benar mengontrol browser IE, alih-alih menggores permukaan seperti metode satu dan dua.
Ada juga metode pemblokiran jendela pop-up berdasarkan kernel IE. Ini memblokir pop-up sebelum dibuka. Prinsipnya adalah: Setiap kali IE membuka jendela baru, event NewWindow akan dipicu dan metode OnNewWindow2([out] IDispatch*, [out] BOOL *bCancel) akan dijalankan. Kelebihan metode ini untuk menentukan apakah peristiwa pembukaan jendela baru terjadi setelah halaman penjelajahan diunduh. Jika ya, berarti itu adalah jendela pop-up biasa, jika tidak maka akan disadap.
Karena browser seperti Gosurf membebani komponen Shocvm.dll secara berlebihan, wajar jika menggunakan metode ketiga. Namun saat digunakan, terkadang kami menemukan bahwa pemfilteran iklan tidak sempurna, padahal prinsip dasarnya sama.