آواتار برای چیست؟

جاوا اسکریپت خروج از صفحه رخ می دهد. چگونه رویداد بستن پنجره (برگه جدید) را تشخیص دهیم؟ از چه چیزی برای آزمایش این استفاده کردیم



رویداد بارگیری مجدد صفحه js (14)

می‌خواهم رویداد بسته شدن پنجره/برگه مرورگر را ضبط کنم. من موارد زیر را با jQuery امتحان کردم:

jQuery(window).bind("beforeunload", function() ( return confirm("آیا واقعا می خواهید ببندید؟")))

اما با ارسال فرم هم کار می کند که من نمی خواهم. من رویدادی می خواهم که فقط زمانی فعال شود که کاربر پنجره را ببندد.

شاید فقط کنترل کننده رویداد قبل از بارگیری در کنترل کننده رویداد ارسال فرم:

jQuery("form").submit(function() ( jQuery(window).unbind("beforeunload"); ... ));

اگر فرم ارسالی شما آنها را به صفحه دیگری ارسال می کند (همانطور که من تصور می کنم اینطور است، یعنی قبل از بارگیری فعال می شود)، می توانید سعی کنید قبل از بارگیری فرم را به یک فراخوانی ajax تغییر دهید. به این ترتیب وقتی فرم قبل از بارگیری است، صفحه شما را ترک نخواهند کرد، و شما می توانید از binding های قبل از بارگیری به دلخواه خود استفاده کنید.

این را هم امتحان کنید

Window.onbeforeunload = تابع () ( if (pasteEditorChange) ( var btn = تایید ("آیا می خواهید تغییرات را ذخیره کنید؟")؛ if(btn === true)( SavetoEdit();// فراخوانی تابع شما ) other (windowClose();// your function call ) ) else (windowClose();// your function call) );

بعد از کار برای من;

$(window).unload(function(event) ( if(event.clientY< 0) { //do whatever you want when closing the window.. } });

من از Slaks استفاده کرده‌ام، اما آن‌طور که هست کار نمی‌کند، زیرا onbeforeunload returnValue به عنوان یک رشته تجزیه می‌شود و سپس در کادر تأیید مرورگر نمایش داده می‌شود. این یک مقدار واقعی مانند "true" را نشان می دهد.

فقط با استفاده از بازخورد. کد من اینجاست

var preventUnloadPrompt; var messageBeforeUnload = "پیام من در اینجا - آیا مطمئنید که می خواهید این صفحه را ترک کنید؟"; //var redirectAfterPrompt = "http://www.google.co.in"; $("a").live("click", function() ( preventUnloadPrompt = true; )); $("form").live("ارسال"، function() ( preventUnloadPrompt = true; )); $(window).bind("قبل از بارگیری"، تابع(e) ( var rval; if(preventUnloadPrompt) (return; ) else (//location.replace(redirectAfterPrompt); return messageBeforeUnload; ) return rval; ))

var validNavigation = false; jQuery(document).ready(function () ( wireUpEvents(); )); تابع endSession() ( // برگه مرورگر یا مرورگر بسته است // اینجا را انجام دهید ... alert("bye"); ) function wireUpEvents() ( /* * برای لیستی از رویدادهایی که قبل از بارگیری در اینترنت اکسپلورر فعال می شوند * http را بررسی کنید ://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx */ window.onbeforeunload = تابع () ( اشکال زدا اگر (!validNavigation) ( endSession(); ) ) // پیوست کلید رویداد را فشار دهید تا بازخوانی F5 را حذف کنید $(document).bind("keypress", تابع (e) (اشکال زدایی اگر (e.keyCode == 116) (validNavigation = true; ))))؛ // ضمیمه رویداد کلیک کنید برای همه پیوندهای موجود در صفحه $("a").bind("click", function () (debugger validNavigation = true; )); // رویداد ارسال را برای همه فرم ها در صفحه $("form") ضمیمه کنید.bind( "submit", function () ( debugger validNavigation = true; ))؛ // ضمیمه کلیک رویداد برای همه ورودی های صفحه $("input"). bind("click", function () ( debugger validNavigation = true; )))؛ «کد را اینجا وارد کنید».

شاید بتوانید OnSubmit را مدیریت کنید و پرچمی را تنظیم کنید که بعداً در کنترل کننده OnBeforeUnload آن را بررسی کنید.

jQuery(window).bind("beforeunload", تابع (e) ( var activeElementTagName = e.target.activeElement.tagName; if (activeElementTagName != "A" && activeElementTagName != "INPUT") (برگردانید "آیا واقعا می خواهید بستن؟"؛ ) ))

برای راه‌حلی که با کنترل‌های شخص ثالث مانند Telerik (مانند RadComboBox) و DevExpress که به دلایل مختلف از تگ‌های Anchor استفاده می‌کنند، به خوبی کار می‌کرد، کد زیر را در نظر بگیرید که نسخه کمی بهبود یافته از کد desm با انتخابگر بهتری برای اتصال برچسب‌های لنگر برای خودتان است:

Var inFormOrLink؛ $("a:not()، a").live("click", function() (inFormOrLink = true; )); $("form").bind("submit", function() (inFormOrLink = true; )); $(window).bind("beforeunload", function(eventObject) ( var returnValue = تعریف نشده؛ if (! inFormOrLink) ( returnValue = "آیا واقعاً می خواهید ببندید؟"; } eventObject.returnValue = returnValue; return returnValue; });!}

پاسخ من ارائه تست های ساده است.

چگونه

پاسخ @SLaks را ببینید.

$(window).on("beforeunload", function() (inFormOrLink را برگردانید؟ "آیا واقعاً می خواهید ببندید؟" : null; ))

چه مدت طول می کشد تا مرورگر در نهایت صفحه را ببندد؟

هر زمان که کاربر صفحه را ببندد (دکمه x یا CTRL + W)، مرورگر کد داده شده را قبل از بارگیری اجرا می کند، اما نه به طور نامحدود. تنها استثنا پنجره تأیید است (بازگشت "آیا واقعاً می خواهید ببندید؟") که منتظر پاسخ کاربر است.

کروم: 2 ثانیه.
فایرفاکس: ∞ (یا دابل کلیک یا بستن اجباری)
حاشیه، غیرمتمرکز: ∞ (یا دوبار کلیک کنید)
اکسپلورر 11: 0 ثانیه
سافاری : انجام دادن

آنچه ما برای آزمایش این استفاده کردیم:

  • سرور Node.js Express با گزارش درخواست
  • فایل HTML کوتاه زیر

کاری که انجام می دهد این است که قبل از اینکه مرورگر صفحه خود را کامل کند (به طور همزمان) تا حد امکان درخواست ارسال می کند.



خروجی کروم:

GET /1480451321041 404 0.389 ms - 32 GET /1480451321052 404 0.219 ms - 32 ... GET /hello/1480451322998 404 0.3328 mss مجموع آن 1480451322998 s 2 ثانیه از زمانی که درخواست ها ممکن است چند میلی ثانیه طول بکشد ارسال شود.

برای راه حل متقابل مرورگر (تست شده در کروم 21، IE9، FF15)، کد زیر را در نظر بگیرید، که یک نسخه کمی تغییر یافته از کد Slaks است:

Var inFormOrLink؛ $("a").live("click", function() (inFormOrLink = true; )); $("form").bind("submit", function() (inFormOrLink = true; )); $(window).bind("beforeunload", function(eventObject) ( var returnValue = تعریف نشده؛ if (! inFormOrLink) ( returnValue = "آیا واقعاً می خواهید ببندید؟"; } eventObject.returnValue = returnValue; return returnValue; }); !}

توجه داشته باشید که از فایرفاکس 4، پیام "آیا مطمئن هستید که می خواهید ببندید؟" ظاهر می شود. نمایش داده نشده. FF فقط یک پیام عمومی را نمایش می دهد. به یادداشت در https://developer.mozilla.org/en-US/docs/DOM/window.onbeforeunload مراجعه کنید

رویداد قبل از بارگیری زمانی فعال می شود که کاربر به هر دلیلی صفحه شما را ترک کند.

برای مثال، اگر کاربر فرمی را ارسال کند، روی پیوندی کلیک کند، پنجره (یا برگه) را ببندد، یا با استفاده از نوار آدرس، کادر جستجو یا نشانک به صفحه جدیدی بروید، فعال می‌شود.

Var inFormOrLink؛ $("a").on("click", function() (inFormOrLink = true; )); $("form").on("submit", function() (inFormOrLink = true; )); $(window).on("beforeunload", function() (inFormOrLink را برگردانید؟ "آیا واقعاً می خواهید ببندید؟" : null; ))

برای نسخه های قدیمی تر از 1.7 جی کوئری این را امتحان کنید:

Var inFormOrLink؛ $("a").live("click", function() (inFormOrLink = true; )); $("form").bind("submit", function() (inFormOrLink = true; )); $(window).bind("beforeunload", function() ( inFormOrLink را برگردانید؟ "آیا واقعاً می خواهید ببندید؟" : null; ))

روش زنده در رویداد ارسال کار نمی کند، بنابراین اگر فرم جدیدی اضافه کنید، باید یک کنترل کننده نیز به آن وصل کنید.

توجه داشته باشید که اگر مدیریت رویداد دیگری ارسال یا پیمایش را لغو کند، اگر پنجره واقعاً بعداً بسته شود، درخواست تأیید را از دست خواهید داد. می‌توانید با ثبت زمان در رویدادهای ارسال و کلیک و بررسی اینکه آیا قبل از بارگیری بیش از چند ثانیه بعد است، این مشکل را برطرف کنید.

فقط چک کن...

تابع wopen_close()( var w = window. open($url, "_blank", "width=600, height=400, scrollbars=no, status=no, resizable=no, screenx=0, screeny=0"); w.onunload = function()( if (window.closed) ( هشدار("پنجره بسته")؛ )else( alert("فقط تازه شده")؛ ) )

از jQuery 1.7، متد .live() منسوخ شده است. از .on() برای پیوست کردن کنترلرهای رویداد استفاده کنید. کاربران نسخه های قدیمی jQuery باید از .delegate() در preference.live() استفاده کنند.

$(window).bind("beforeunload", function() ( return true || confirm("آیا واقعا می خواهید ببندید؟"); ));

عصر بخیر. من اخیراً مقاله ای در مورد نحوه انجام این کار ارسال کردم، اما بسیاری از افراد خواستند مقاله ای با افکت آینه ای اضافه کنند تا زمانی که بازدیدکننده از سایت خارج می شود، یعنی زمانی که می خواهند صفحه را ببندند، پنجره ظاهر شود.

امروز در مورد این موضوع صحبت خواهیم کرد و من یک پیاده سازی ساده را نشان خواهم داد.

البته بحث در مورد افزودن یا عدم افزودن پنجره پاپ آپ در بستن صفحه به سایت شما ابدی خواهد بود. برخی می گویند برای کسانی که آن را اضافه می کنند یک مکان جداگانه در جهنم آماده شده است، که به شدت خشمگین است، که اگر تصمیم به ترک بگیرم، آن وقت می روم و هیچ پنجره پاپ آپی مانع من نمی شود، بلکه فقط مرا آزار می دهد. برخی دیگر می گویند این پنجره های بازشو باعث افزایش تبدیل می شوند و عالی کار می کنند. من فکر می کنم ارزش امتحان کردن را دارد، و در آنجا، بر اساس آمار، و در حال حاضر نتیجه گیری خاصی در مورد جایگاه و محصول خود داشته باشید.

نحوه ایجاد یک پاپ آپ در بسته شدن صفحه

در واقع، من حیله گرانه فلسفه ورزی نکردم و فقط مقاله آخر را کمی تغییر دادم، چند خط کد جاوا اسکریپت اضافه کردم. قبلاً، در اولین بازدید از سایت، یک پنجره مودال ظاهر می شد. اکنون فقط در اولین بازدید از سایت (زمانی که مکان نما از منطقه اصلی سایت خارج می شود و به قسمت برگه می رود) نشان داده می شود. در صورت بازدید مجدد کاربر از سایت، این پنجره نمایش داده نمی شود. این به همان روشی که در مقاله قبلی با استفاده از کوکی ها اجرا می شود. کوکی ها به مدت 7 روز ذخیره می شوند، شما می توانید هر مقدار را به صلاحدید خود تعیین کنید.

و با این حال، ما یک رویداد را با کلیک بر روی ضربدر در برگه قطع نمی کنیم، بلکه به سادگی موقعیت مکان نما را بررسی می کنیم. ما پنجره، دکمه ها و غیره را مسدود نمی کنیم، به چیزی نیاز نداریم، بلکه فقط پنجره را نشان می دهیم.

مانند دفعه قبل، ما از پلاگین arcticModal jQuery استفاده خواهیم کرد، به این معنی که خود jQuery را نیز شامل می‌شویم:

و ما تم افزونه را به هم وصل می کنیم، من از استاندارد استفاده می کنم، اما شما می توانید خودتان بنویسید:

اکنون، برای اینکه کوکی‌های ما کار کنند، بیایید افزونه کوکی‌ها را از Yandex اضافه کنیم:

و ما اسکریپت config.js را با محتوای زیر اضافه می کنیم:

$(document).ready(function () ( if (!$.cookie("smartCookies")) ($(document).mouseleave(function (e) ( تابع getWindow() ($("offer").arcticmodal (( closeOnOverlayClick: true، closeOnEsc: true ))؛؛ setTimeout(getWindow, 1)؛ $.cookie("smartCookies"، true، ( منقضی می شود: 7، مسیر: "/" )); )); )؛ ) )

اگر مقاله آخر را مطالعه کرده باشید متوجه شده اید که چیزی تغییر نکرده است به جز اینکه اسکریپت فایل config.js کمی تغییر کرده است. یعنی شرایط دیگری ظاهر شد که وقتی مکان‌نما از ناحیه سایت خارج می‌شود، یعنی در ناحیه برگه باشد، کار می‌کند.

به هر حال، آخرین بار فراموش کردم توضیح دهم که این پارامترها به چه معنا هستند:

CloseOnOverlayClick: true، closeOnEsc: true

  • closeOnOverlayClick - به شما این امکان را می دهد که وقتی روی هر ناحیه ای در یک غیرپنجره کلیک می کنید، پنجره را ببندید.
  • closeOnEsc - با فشار دادن Escape پنجره را می بندد

حالا در مورد خود صفحه آرایی. اصلا تغییر نکرده - هیچی.

پیشنهاد، فرم و غیره شما اینجا خواهد بود.

می توانید فرم یا پیشنهادی برای دنبال کردن شما در شبکه های اجتماعی درج کنید

کمی توضیح می دهم. modalInner - بسته بندی پنجره معین، با نمایش: هیچ در سبک. پیشنهاد کلاس خود پنجره مودال است. اگر آن را تغییر دادید، فراموش نکنید که کلاس را در اسکریپت تغییر دهید.

در اینجا پیاده سازی ساده ای از یک پنجره پاپ آپ در هنگام بسته شدن صفحه وجود دارد. نظر شما چیست، آیا ارزش استفاده از افکت مشابه در سایت را دارد؟



رویدادهای window js (14)

می‌خواهم رویداد بسته شدن پنجره/برگه مرورگر را ضبط کنم. من موارد زیر را با jQuery امتحان کردم:

jQuery(window).bind("beforeunload", function() ( return confirm("آیا واقعا می خواهید ببندید؟")))

اما با ارسال فرم هم کار می کند که من نمی خواهم. من رویدادی می خواهم که فقط زمانی فعال شود که کاربر پنجره را ببندد.

از jQuery 1.7، متد .live() منسوخ شده است. از .on() برای پیوست کردن کنترلرهای رویداد استفاده کنید. کاربران نسخه های قدیمی jQuery باید از .delegate() در preference.live() استفاده کنند.

$(window).bind("beforeunload", function() ( return true || confirm("آیا واقعا می خواهید ببندید؟"); ));

$(window).unbind();

jQuery(window).bind("beforeunload", تابع (e) ( var activeElementTagName = e.target.activeElement.tagName; if (activeElementTagName != "A" && activeElementTagName != "INPUT") (برگردانید "آیا واقعا می خواهید بستن؟"؛ ) ))

پاسخ من ارائه تست های ساده است.

چگونه

پاسخ @SLaks را ببینید.

$(window).on("beforeunload", function() (inFormOrLink را برگردانید؟ "آیا واقعاً می خواهید ببندید؟" : null; ))

چه مدت طول می کشد تا مرورگر در نهایت صفحه را ببندد؟

هر زمان که کاربر صفحه را ببندد (دکمه x یا CTRL + W)، مرورگر کد داده شده را قبل از بارگیری اجرا می کند، اما نه به طور نامحدود. تنها استثنا پنجره تأیید است (بازگشت "آیا واقعاً می خواهید ببندید؟") که منتظر پاسخ کاربر است.

کروم: 2 ثانیه.
فایرفاکس: ∞ (یا دابل کلیک یا بستن اجباری)
حاشیه، غیرمتمرکز: ∞ (یا دوبار کلیک کنید)
اکسپلورر 11: 0 ثانیه
سافاری : انجام دادن

آنچه ما برای آزمایش این استفاده کردیم:

  • سرور Node.js Express با گزارش درخواست
  • فایل HTML کوتاه زیر

کاری که انجام می دهد این است که قبل از اینکه مرورگر صفحه خود را کامل کند (به طور همزمان) تا حد امکان درخواست ارسال می کند.



خروجی کروم:

GET /1480451321041 404 0.389 ms - 32 GET /1480451321052 404 0.219 ms - 32 ... GET /hello/1480451322998 404 0.3328 mss مجموع آن 1480451322998 s 2 ثانیه از زمانی که درخواست ها ممکن است چند میلی ثانیه طول بکشد ارسال شود.

این را هم امتحان کنید

Window.onbeforeunload = تابع () ( if (pasteEditorChange) ( var btn = تایید ("آیا می خواهید تغییرات را ذخیره کنید؟")؛ if(btn === true)( SavetoEdit();// فراخوانی تابع شما ) other (windowClose();// your function call ) ) else (windowClose();// your function call) );

فقط چک کن...

تابع wopen_close()( var w = window. open($url, "_blank", "width=600, height=400, scrollbars=no, status=no, resizable=no, screenx=0, screeny=0"); w.onunload = function()( if (window.closed) ( هشدار("پنجره بسته")؛ )else( alert("فقط تازه شده")؛ ) )

متأسفانه، چه بارگذاری مجدد فعال شود، چه تغییر مسیر صفحه جدید یا یک رویداد بسته شدن مرورگر. یک جایگزین این است که شناسه‌ای را بگیرید که رویداد را فعال می‌کند، و اگر یک فرم است، هیچ تابعی را فراخوانی نکنید، و اگر شناسه فرم نیست، پس از بسته شدن صفحه، کاری را که می‌خواهید انجام دهید، انجام دهید. من مطمئن نیستم که آیا این نیز به طور مستقیم ممکن و خسته کننده است.

قبل از اینکه کلاینت برگه را ببندد می توانید کارهای کوچکی انجام دهید. جاوا اسکریپت بستن برگه/بستن مرورگر مرورگر را تشخیص می‌دهد، اما اگر لیست اقدامات شما بزرگ است و برگه قبل از تکمیل بسته می‌شود، شما درمانده هستید. می توانید امتحان کنید اما با تجربه من به آن وابسته نیستید.

Window.addEventListener("beforeunload", تابع (e) ( var confirmationMessage = "\o/"; /* آیا کد اقدام کوچکی را در اینجا وارد می کنید */ (e || window.event).returnValue = confirmationMessage; //Gecko + IE بازگشت تایید پیام؛ //Webkit، Safari، Chrome));

اگر فرم ارسالی شما آنها را به صفحه دیگری ارسال می کند (همانطور که من تصور می کنم اینطور است، یعنی قبل از بارگیری فعال می شود)، می توانید سعی کنید قبل از بارگیری فرم را به یک فراخوانی ajax تغییر دهید. به این ترتیب وقتی فرم قبل از بارگیری است، صفحه شما را ترک نخواهند کرد، و شما می توانید از binding های قبل از بارگیری به دلخواه خود استفاده کنید.

برای راه‌حلی که با کنترل‌های شخص ثالث مانند Telerik (مانند RadComboBox) و DevExpress که به دلایل مختلف از تگ‌های Anchor استفاده می‌کنند، به خوبی کار می‌کرد، کد زیر را در نظر بگیرید که نسخه کمی بهبود یافته از کد desm با انتخابگر بهتری برای اتصال برچسب‌های لنگر برای خودتان است:

Var inFormOrLink؛ $("a:not()، a").live("click", function() (inFormOrLink = true; )); $("form").bind("submit", function() (inFormOrLink = true; )); $(window).bind("beforeunload", function(eventObject) ( var returnValue = تعریف نشده؛ if (! inFormOrLink) ( returnValue = "آیا واقعاً می خواهید ببندید؟"; } eventObject.returnValue = returnValue; return returnValue; });!}

من از Slaks استفاده کرده‌ام، اما آن‌طور که هست کار نمی‌کند، زیرا onbeforeunload returnValue به عنوان یک رشته تجزیه می‌شود و سپس در کادر تأیید مرورگر نمایش داده می‌شود. این یک مقدار واقعی مانند "true" را نشان می دهد.

فقط با استفاده از بازخورد. کد من اینجاست

var preventUnloadPrompt; var messageBeforeUnload = "پیام من در اینجا - آیا مطمئنید که می خواهید این صفحه را ترک کنید؟"; //var redirectAfterPrompt = "http://www.google.co.in"; $("a").live("click", function() ( preventUnloadPrompt = true; )); $("form").live("ارسال"، function() ( preventUnloadPrompt = true; )); $(window).bind("قبل از بارگیری"، تابع(e) ( var rval; if(preventUnloadPrompt) (return; ) else (//location.replace(redirectAfterPrompt); return messageBeforeUnload; ) return rval; ))

var validNavigation = false; jQuery(document).ready(function () ( wireUpEvents(); )); تابع endSession() ( // برگه مرورگر یا مرورگر بسته است // اینجا را انجام دهید ... alert("bye"); ) function wireUpEvents() ( /* * برای لیستی از رویدادهایی که قبل از بارگیری در اینترنت اکسپلورر فعال می شوند * http را بررسی کنید ://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx */ window.onbeforeunload = تابع () ( اشکال زدا اگر (!validNavigation) ( endSession(); ) ) // پیوست کلید رویداد را فشار دهید تا بازخوانی F5 را حذف کنید $(document).bind("keypress", تابع (e) (اشکال زدایی اگر (e.keyCode == 116) (validNavigation = true; ))))؛ // ضمیمه رویداد کلیک کنید برای همه پیوندهای موجود در صفحه $("a").bind("click", function () (debugger validNavigation = true; )); // رویداد ارسال را برای همه فرم ها در صفحه $("form") ضمیمه کنید.bind( "submit", function () ( debugger validNavigation = true; ))؛ // ضمیمه کلیک رویداد برای همه ورودی های صفحه $("input"). bind("click", function () ( debugger validNavigation = true; )))؛ «کد را اینجا وارد کنید».

مشکل من: رویداد "onbeforeunload" تنها در صورتی فعال می شود که تعداد ارسال (کلیک) فرد باشد. من ترکیبی از راه حل ها از موضوعات مشابه در SO داشتم تا راه حل من کار کند. خوب، کد من صحبت خواهد کرد.

$(document).ready(function() ( updatefgallowPrompt(true); window.onbeforeunload = WarnUser; ) تابع WarnUser() ( var allowPrompt = getfgallowPrompt(); if(allowPrompt) ( saveIndexedDataAlert(); updatefgallowPrompt(true); event.stopPropagation)تابع saveIndexedDataAlert() ( var allowPrompt = getfgallowPrompt(); var lenIndexedDocs = parseInt($("#sortable3 > li").size()) + parseInt($("#sortable3 > ul").size())؛ اگر (allowPrompt && $.trim(lenIndexedDocs) > 0) ( event.returnValue = "پیام شما"; } else { event.returnValue = " "; updatefgallowPrompt(true); } } !}$(document).click(function(event) ($("a").live("click", function() ( updatefgallowPrompt(false); )); ));تابع updatefgallowPrompt (allowPrompt)( //exit msg dfds $("body").data("allowPrompt", allowPrompt); ) تابع getfgallowPrompt()( return $("body").data("allowPrompt"); )

بعد از کار برای من;

$(window).unload(function(event) ( if(event.clientY< 0) { //do whatever you want when closing the window.. } });

Window.onbeforeunload = تابع () ( بازگشت "آیا واقعاً می خواهید ببندید؟"؛ );

شاید فقط کنترل کننده رویداد قبل از بارگیری در کنترل کننده رویداد ارسال فرم:

jQuery("form").submit(function() ( jQuery(window).unbind("beforeunload"); ... ));

2

من یک صفحه والدین و یک صفحه فرزند دارم. صفحه فرزند در برگه جدید باز شد

من می خواهم یک پیام هشدار را نشان دهم (صفحه کودک بسته می شود) , وقتی برگه کودک را میبندم
چگونه پیام های بسته را هنگام بستن یک برگه نشان دهیم؟ (زمان تازه کردن نیست)

من استفاده کردم OnUnloadو قبل از بارگیری.
این دو روش هنگام بازخوانی صفحه و بستن برگه ها نیز فراخوانی می شوند.

Window.onunload = تابع doUnload(e) ( هشدار ("پنجره کودک در حال بسته شدن است...")؛ )

Window.onbeforeunload = تابع doUnload(e) ( هشدار ("پنجره کودک در حال بسته شدن است...")؛ )

فقط باید یک پیام هشدار نشان دهم بستن برگهدر مرورگر

کمکم کنید. پیشاپیش ممنون

من از اسکریپت زیر استفاده میکنم در IE کار می کرد. اما در فایرفاکس کار نکرد

نحوه دستیابی به این امر در فایرفاکس و سایر مرورگرها.

  • 4 پاسخ
  • مرتب سازی:

    فعالیت

1

برای این، afaik هرگز یک اسکریپت مرورگر متقابل نبود. راه حل این است که برای کشف چیزهای مهم به ویژگی های غیر مستند و قابل تغییر خاص مرورگر تکیه نکنید.

از آنجایی که شما یک صفحه CHILD دارید، می توانید آزمایشی را روی والد (بازکننده) تنظیم کنید که ویژگی childWindowHandle.closed را در فواصل زمانی بررسی می کند و بر اساس آن عمل می کند.

1

با فرض اینکه فقط می‌خواهد رویداد قبل از بارگیری Crossbrowser را فعال کند، تقریباً این کار را انجام می‌دهد (به استثنای Opera)

Try(// http://www.opera.com/support/kb/view/827/ opera.setOverrideHistoryNavigationMode("compatible"); history.navigationMode = "compatible"; )catch(e)() //Our Where تابع پیام F" Are You Going ReturnMessage() ("WTF!!!"; ) //تابع تابع UnBind UnBindWindow() (window.onbeforeunload = null; return true; ) //پیوندهایی که نمی خواهیم روی سند تاثیر بگذارند .getElementById("homebtn").onclick = UnBindWindow;document.getElementById("googlebtn").onclick = UnBindWindow;//Bind Exit Message Dialogue window.onbeforeunload = ReturnMessage;

0

ممکن است نتوانید این کار را به جز برخی روش‌های مبتنی بر کوکی انجام دهید، که یک راه‌حل توسعه به عنوان کوکی‌های غیردائمی است. شناسایی دوم بازخوانی صفحه، تغییر مسیر مبتنی بر فرم، یا تغییر مسیر به عقب، یا بسته شدن مرورگر با بارگیری رویداد ساده و خسته کننده نیست. توصیه کنید به آن وابسته نباشید.

قبل از اینکه مشتری برگه را ببندد می توانید کارهای کوچکی انجام دهید. جاوا اسکریپت بستن برگه مرورگر/بستن مرورگر را تشخیص می‌دهد، اما اگر لیست اقدامات شما بزرگ است و برگه قبل از تکمیل بسته می‌شود، درمانده هستید. می توانید امتحان کنید اما با تجربه من به آن وابسته نیستید. بله، در این زمان نمی‌توانید برگشت، به‌روزرسانی و بستن را متمایز کنید. بنابراین، هیچ راه مطمئنی برای تشخیص اینکه آیا یک کودک واقعا بسته است وجود ندارد.

Window.addEventListener("beforeunload", تابع (e) ( var confirmationMessage = "\o/"; /* آیا کد اقدام کوچکی را در اینجا وارد می کنید */ (e || window.event).returnValue = confirmationMessage; //Gecko + IE بازگشت تایید پیام؛ //Webkit، Safari، Chrome));

"رویداد onbeforeunload متن ارائه شده توسط سایت را نمایش نمی دهد، فقط پیام استاندارد را نشان می دهد"، با قضاوت بر اساس نظرات، در نهایت و غیرقابل برگشت. در همین راستا خواستم کمی درباره تاریخچه موضوع بنویسم.

بسیاری از مردم می‌دانند که به لطف onbeforeunload، می‌توانید از کاربر بخواهید که اگر داده‌های ذخیره‌نشده دارد (مثلاً در یک فرم نوشته شده است، اما پیامی به انجمن ارسال نکرده است) صفحه وب را ترک نکند. برای انجام این کار، فقط چیزی شبیه به این جاوا اسکریپت اضافه کنید:
window.onbeforeunload = تابع (evt) ( var message = "سند "foo" ذخیره نشده است. اگر صفحه را ترک کنید تغییرات را از دست خواهید داد."; if (نوع evt == "تعریف نشده") ( evt = window.event ; ) if (evt) ( evt.returnValue = پیام؛ ) پیام را برگرداند؛ )
پس از آن، در حالت ایده آل، اگر کاربر بخواهد صفحه را ترک کند (به هر نحوی - برگه، کل مرورگر را ببندید، صفحه را بارگذاری مجدد کنید، یک آدرس جدید در نوار آدرس وارد کنید، یک نشانک را دنبال کنید، و غیره) مشاهده خواهد کرد. درخواست تایید و خروج از صفحه را می توان لغو کرد. پیش از این، نویسندگان بی‌وجدان سایت از این پنجره برای فریب کاربر و نگه داشتن او در صفحه استفاده می‌کردند، به‌عنوان مثال، از متن «OK برای ادامه کار با سایت و لغو برای بستن» استفاده می‌کردند (در واقع، دکمه‌ها برعکس عمل می‌کردند. ). یا حتی چیزی ترسناک تر، مانند "OK را فشار دهید تا هزینه 1000 دلاری از کارت اعتباری خود را تأیید کنید."

سپس مرورگرها هوشمندتر شدند و شروع به اضافه کردن متن کمکی کردند تا فریب کاربر را سخت‌تر کنند. به عنوان مثال، IE8 چگونه این کار را انجام می دهد:

تقریباً همان متن در فایرفاکس 3 بود:


اگر همه را بخوانید مشخص می شود که سایت چه گفته و مرورگر چه گفته است. با این حال، هنوز هم امکان تقلب وجود دارد.


در اینجا ما توضیح واضحی از اقدامات درست روی دکمه ها می بینیم. متقاعد کردن کاربر که روی "ترک" برای ماندن و "Stay" برای خروج کلیک کند بسیار دشوار است. به نظر من راه حل ایده آل است و این تاپیک را می توان بست. به طور کلی، همانطور که می دانید، OK بدون چهره تقریباً در هر گفتگو باید با نام عمل جایگزین شود (به عنوان مثال، "حذف فایل ها"، "جستجو"، "افزودن خط"، "فایل باز کردن، و غیره) این تعداد خطاهای کاربر را کاهش می دهد، حتی اگر کنترل کاملی بر متن گفتگو داشته باشید.

درام با باگ 641509 چه بود؟ به این صورت که این تایید در فایرفاکس 4 و بالاتر به این صورت است:


همانطور که می بینید، متن سفارشی به طور کلی ناپدید شده است. از نسخه 4، وب سایت نمی تواند هیچ پیام اضافی به کاربر بدهد و توضیح دهد که چرا به طور خاص نمی خواهد کاربر را ترک کند. فرض کنید اگر یک رابط برای کار با اسناد زیادی در یک پنجره پیاده سازی کنید، و یکی از آنها ذخیره نشود، می توانید بگویید کدام یک، اما در فایرفاکس شما این را متوجه نخواهید شد. شاید شما نمی خواهید آن را ذخیره کنید و با دیدن پیام، با آرامش صفحه را ترک می کنید، در غیر این صورت نمی دانید موضوع چیست. در یک ورق