Sejak artikel [JavaScript] Menyesuaikan Kotak Pesan diterbitkan, banyak netizen yang bertanya bagaimana memanggil metode ShowInfo di sisi server. Saya memikirkan metode kompromi untuk mencapainya selama akhir pekan.
Pertama-tama, kita harus bisa menjelaskan mengapa kita menggunakan Page.Write untuk menampilkan metode JS khusus ke halaman dan mengapa IE tidak dapat mengenalinya dan kesalahan "XXX tidak ditentukan" akan muncul. Alasannya sederhana, karena script yang kita output menggunakan Page.Write muncul di bagian atas halaman. Ketika IE membaca bahwa itu adalah fungsi javascript, ia mulai menjalankannya. Namun, file js yang kami tautkan tidak dibaca oleh IE saat ini, jadi IE tidak dapat mengenali metode yang kami tetapkan di file js. Lalu mengapa peringatan tulis bisa dilakukan? Karena alert adalah fungsi skrip yang tertanam di IE, IE akan mengenalinya terlepas dari apakah ada halaman atau tidak.
Setelah Anda menemukan masalahnya, maka secara alami akan terpecahkan:
1. Tanamkan metode khusus kami ke IE. ---> Tampaknya agak aneh, haha
2. Tunggu hingga halaman dimuat sebelum memicu acara. --->Acara pemicu, ya.
Bagaimana Anda tahu jika halaman telah selesai dimuat?
1. Melalui status dokumen
2. Dipicu oleh peristiwa (windows.onload)
Yang pertama sepertinya kurang aman. Terkadang masih menunjukkan transmisi data meskipun sudah terisi penuh (FF adalah situasi yang paling jelas), jadi lebih aman menggunakan event.
Tentukan metode sederhana, pasang di windows.onload, dan beri tanda saat menjalankan
var loadComplete = salah;
fungsi LoadCompleted()
{
loadComplete= benar;
}
window.attachEvent("onload",LoadCompleted);
Haha, dengan cara ini kita hanya perlu menilai apakah halaman dimuat dengan menilai loadComplete.
var mImgdir = "";
var mCaption = "keterangan";
var mMsg = "Pesan";
var mOkClick= nol;
fungsi ShowMessage(imgdir,caption,pesan,OkClick)
{
jika (memuat Selesai)
{
KMessageBox.ShowInfo(mImgdir,mCaption,mMsg,mOkClick);
}
}
Dengan cara ini, ketika loadComplete tidak salah, kita tidak akan menjalankan metode KMessageBox.ShowInfo(), tetapi tidak akan ada prompt kesalahan JS.
Ini saja tidak cukup, karena skrip keluaran hanya dijalankan satu kali oleh IE saat mengeluarkan halaman, tetapi saat ini loadComplete=false, jadi kita perlu mendeteksi secara teratur apakah halaman telah dimuat. Kalau soal waktu, kami hanya menggunakan setTimeout & setInterval. Kami memerlukan deteksi konstan di sini, jadi kami menggunakan metode setInterval. Kode terakhirnya adalah sebagai berikut:
var loadComplete = salah;
var mImgdir = "";
var mCaption = "keterangan";
var mMsg = "Pesan";
var mOkClick= nol;
var timerID;
fungsi ShowMessage(imgdir,caption,pesan,OkClick)
{
jika (memuat Selesai)
{
KMessageBox.ShowInfo(mImgdir,mCaption,mMsg,mOkClick);
//Bongkar acara ini window.detachEvent("onload",function(){LoadCompleted;}); //Hentikan pemicuan waktu
window.clearInterval(timerID);
}
}
fungsi LoadCompleted() { loadComplete=benar;
window.attachEvent("onload",LoadCompleted);
//Setel mekanisme deteksi waktu
timerID = window.setInterval(ShowMessage,1);
Tentu saja kode di atas hanya kompatibel dengan IE karena menggunakan AttachEvent dan detachEvent. Sedangkan untuk membuatnya kompatibel dengan browser lain, silakan merujuk ke [JavaScript] Metode Penyesuaian Tampilan Judul untuk metode perawatannya:
if(!document.attachEvent)//Bukan YAITU
{
document.attachEvent = function(){document.addEventListener(argumen[0].substr(2),argumen[1],argumen[2])}
}
if(!window.attachEvent)//Bukan YAITU
{
window.attachEvent = function(){window.addEventListener(argumen[0].substr(2),argumen[1],argumen[2])}
}
Di sisi server, selama StringBuilder menghasilkan skrip di atas dan kemudian menulisnya, itu sudah cukup. Di atas hanya memberikan gambaran, tentu saja ada cara lain, misalnya saya tidak menggunakan deteksi terjadwal, saya langsung memasangnya di windows.onload dan membiarkan halaman secara otomatis memantau dan mengeksekusi secara otomatis :), seperti kata pepatah. Semua jalan menuju Roma~~~~~~
Ide di atas datang dari yui, dan yui mengimplementasikan Custom MessageBox yang lebih indah. Teman-teman yang berminat bisa mempelajarinya bersama.
http://www.cnblogs.com/walkingboy/archive/2006/08/28/autorun_customerfunction.html