আচ্ছা আপনি যে "ম্যাজিকাল টাইম" এর কথা বলবেন সম্ভবত পপআপের ডিওএম লোড হওয়ার পরে। অন্যথায় এটি তখন হতে পারে যখন সমস্ত কিছু (চিত্র, আউটবোর্ড সিএসএস ইত্যাদি) লোড হয়ে গেছে। আপনি পপআপে খুব বড় গ্রাফিক যুক্ত করে এটি সহজে পরীক্ষা করতে পারেন (প্রথমে আপনার ক্যাশে সাফ করুন!)। আপনি যদি জাভাস্ক্রিপ্ট ফ্রেমওয়ার্ক যেমন jQuery (বা অনুরূপ কিছু) ব্যবহার করছিলেন তবে উইন্ডোজ অফসেটটি পরীক্ষা করার আগে আপনি DOM লোড হওয়ার জন্য অপেক্ষা করতে প্রস্তুত () ইভেন্ট (বা অনুরূপ কিছু) ব্যবহার করতে পারেন। এর মধ্যে বিপদটি হ'ল সাফারি সনাক্তকরণ একটি বিবাদী উপায়ে কাজ করে: সাফারিতে পপআপের ডিওএম কখনই প্রস্তুত হতে পারে না) কারণ এটি আপনাকে যে উইন্ডোটি খোলার চেষ্টা করছে তার জন্য একটি বৈধ হ্যান্ডেল দেবে - এটি প্রকৃতপক্ষে খোলে বা না না. (প্রকৃতপক্ষে, আমি বিশ্বাস করি যে উপরে আপনার পপআপ পরীক্ষা কোডটি সাফারিটির জন্য কাজ করবে না))
আমি মনে করি আপনি করতে পারেন সবচেয়ে ভাল কাজটি আপনার পরীক্ষাটি সেটটাইমআউট () এ মোড়ানো এবং পরীক্ষা চালানোর আগে পপআপটি 3-5 সেকেন্ডে লোডিং সম্পূর্ণ করতে দেয়। এটি নিখুঁত নয়, তবে এটি কমপক্ষে 95% সময় নিয়ে কাজ করা উচিত।
আমি ক্রোম ব্রাউজার ছাড়াই ক্রস ব্রাউজার সনাক্তকরণের জন্য যে কোডটি ব্যবহার করি তা এখানে।
function _hasPopupBlocker(poppedWindow) {
var result = false;
try {
if (typeof poppedWindow == 'undefined') {
// Safari with popup blocker... leaves the popup window handle undefined
result = true;
}
else if (poppedWindow && poppedWindow.closed) {
// This happens if the user opens and closes the client window...
// Confusing because the handle is still available, but it's in a "closed" state.
// We're not saying that the window is not being blocked, we're just saying
// that the window has been closed before the test could be run.
result = false;
}
else if (poppedWindow && poppedWindow.test) {
// This is the actual test. The client window should be fine.
result = false;
}
else {
// Else we'll assume the window is not OK
result = true;
}
} catch (err) {
//if (console) {
// console.warn("Could not access popup window", err);
//}
}
return result;
}
আমি যা করি তা এই পিতামাতার কাছ থেকে এই পরীক্ষাটি চালানো হয় এবং সেট টাইমআউট () এ মোড়ানো হয়, বাচ্চা উইন্ডোটি 3-5 সেকেন্ড লোড দেওয়ার জন্য দেয়। শিশু উইন্ডোতে আপনাকে একটি পরীক্ষা ফাংশন যুক্ত করতে হবে:
ফাংশন পরীক্ষা() {}
পপআপ ব্লকার সনাক্তকারী পরীক্ষা করে "উইন্ডো" এর একটি সদস্য হিসাবে "পরীক্ষা" ফাংশনটি বিদ্যমান কিনা তা পরীক্ষা করে।
জুন 15 যোগ করা হয়েছে 2015:
আমি মনে করি এটি হ্যান্ডেল করার আধুনিক উপায়টি হ'ল উইন্ডো.পোস্টমেসেজ () ব্যবহার করে সন্তানের পিতা বা মাকে জানানো হবে যে উইন্ডোটি লোড হয়েছে। পদ্ধতিটি একই রকম (শিশু পিতামাতাকে বোঝায় যে এটি লোড হয়েছে) তবে যোগাযোগের মাধ্যমটি উন্নত হয়েছে। আমি সন্তানের কাছ থেকে এই ক্রস-ডোমেনটি করতে পেরেছিলাম:
$(window).load(function() {
this.opener.postMessage({'loaded': true}, "*");
this.close();
});
অভিভাবকরা এই বার্তাটি ব্যবহার করে শোনেন:
$(window).on('message', function(event) {
alert(event.originalEvent.data.loaded)
});
আশাকরি এটা সাহায্য করবে.