PDA

View Full Version : چطوری میشه فهمید یکی از تب های باز مرورگر بسته شده؟



saeed_sho
دوشنبه 19 تیر 1391, 17:05 عصر
سلام
کسی میدونه چطوری میشه فهمید که یکی از چندتا تب مرورگر که بازه بسته شده؟
برای آمار سایتم میخوام و از سشن استفاده میکنم
ممنون میشم راهنمایی کنید

saeed_sho
دوشنبه 02 مرداد 1391, 14:05 عصر
این مشکل باز شدن سشن و زیاد شدن آمار رو حل کردم حالا وقتی کاربر یکی از چندتا تب رو میبنده سشن جاری رو اصطلاحا kill میکنم اگه کاربر چندتا تب باز داشته باشه و بازم توی سایت کاری داشته باشه باید دوباره لاگین کنه
چطوری میشه این مشکلو حل کرد میخوام دوباره لاگین نکنه
کارم خیلی گیره لطفا راهنمایی کنید

saeed_sho
سه شنبه 03 مرداد 1391, 14:35 عصر
من از این کد استفاده کردم اما در مسترپیج جواب نمیده و در فایرفاکس هم همین طور
<body class="stl_master_back" onclick ="validNavigation=true;">

<telerik:RadScriptManager Runat="server" EnablePageMethods ="true">
</telerik:RadScriptManager>

اینم اسکریپت
var validNavigation = false;

function HandleClose() {
alert("killing session");
PageMethods.AbandonSession();
}

function wireupEvents() {
window.onbeforeunload = function () {
if (!validNavigation) {
HandleClose();
}
}

$("a").bind("click",function() {
validNavigation = true;
});

$("form").bind("submit", function () {
validNavigation = true;
});

}

$(document).ready(function(){
wireupEvents();
})

اینم codeBehind
<System.Web.Services.WebMethod()>
Public Shared Sub AbandonSession()
'HttpContext.Current.Session.Abandon()

Dim currentUser As MembershipUser = Membership.GetUser()

HttpContext.Current.Application.Lock()

If (currentUser IsNot Nothing) Then

If (HttpContext.Current.Application(currentUser.UserN ame) = 1) Then

HttpContext.Current.Application(currentUser.UserNa me) = Nothing

OnlineUsersManager.DecreaseRegisterUsers()
Else
HttpContext.Current.Application(currentUser.UserNa me) = CInt(HttpContext.Current.Application(currentUser.U serName)) - 1
End If

Else

If (HttpContext.Current.Application(HttpContext.Curre nt.Request.UserHostAddress) = 1) Then

HttpContext.Current.Application(HttpContext.Curren t.Request.UserHostAddress) = Nothing


OnlineUsersManager.DecreaseGuestUsers()
Else
HttpContext.Current.Application(HttpContext.Curren t.Request.UserHostAddress) = CInt(HttpContext.Current.Application(HttpContext.C urrent.Request.UserHostAddress)) - 1
End If

End If

HttpContext.Current.Application.UnLock()

End Sub
لطفا راهنمایی کنید

saeed_sho
سه شنبه 03 مرداد 1391, 19:10 عصر
یه راه پیدا کردم خیلی بهش نزدیک شدم اما نمیتونم درست اجراش کنم لطفا کمکم کنید تا اجراش کنم کارم خیلی گیره دو تا روشو ادغام کردم
راه رو از این تاپیک پیدا کردم
http://barnamenevis.org/showthread.php?86625-%D9%81%D8%B1%D8%A7%D8%AE%D9%88%D8%A7%D9%86%DB%8C-%DB%8C%DA%A9-%D8%AA%D8%A7%D8%A8%D8%B9-%D9%86%D9%88%D8%B4%D8%AA%D9%87-%D8%B4%D8%AF%D9%87-%D8%AF%D8%B1%D8%AF%D8%A7%D8%AA-%D9%86%D8%AA-%D8%A8%D9%88%D8%B3%DB%8C%D9%84%D9%87-%DA%A9%D8%AF%D9%87%D8%A7%DB%8C-%D8%AC%D8%A7%D9%88%D8%A7

خب حالا کاری که من کردم این کد html
<asp:Button ID="btn" runat="server" Text="Button" CssClass ="HideButton" />

خب اینم کد جاوا اسکریپت
var validNavigation = false;

function wireupEvents() {
window.onbeforeunload = function () {
if (!validNavigation) {
CallFunction();
}
}

$("a").bind("click",function() {
validNavigation = true;
});

$("form").bind("submit", function () {
validNavigation = true;
});

}

$(document).ready(function(){
wireupEvents();
})

function CallFunction(){
var e = document.getElementById("btn");
if (e){
e.click();
}
}

اینم کد vb
Protected Sub btn_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btn.Click
ScriptManager.RegisterClientScriptBlock(Me, Me.GetType(), "alert", "alert('close tab')", True)
End Sub

الان برای unbeforeunload تنظیم شده اگه روی unload هم پیغام رو نشون بده مشکلی نیست فقط پیغامو نشون بده این برای بستن تب یا مرورگر هست هیچ واکنشی موقع بستن تب ها نشون نمیده
لطفا کمک کنید

saeed_sho
چهارشنبه 04 مرداد 1391, 10:18 صبح
یه سؤال دارم
وقتی کاربر تب جدید باز میکنه یه سشن جدید ایجاد میشه؟
چه مواقعی برای کاربر سشن ایجاد میشه؟ مثلا اگه رو لینک کلیک کنه چی؟

saeed_sho
چهارشنبه 04 مرداد 1391, 18:46 عصر
کسی که جواب نداد خودم تقریبا کاملش کردم
ببینید این کدی که میزارم بستن تب توی بیشتر مرورگرها رو نشون میده البته با اینترنت اکسپلورر امتحان نکردم چون ماله من خراب لطفا اگه باهاش امتحان کردین نتیجه رو بگید تا اینجا مشکلی نیست اما برای بستن مرورگر هم در بیشتر مرورگرها جواب میده به جز فایرفاکس
لطفا اساتید کمک کنند تا در فایرفاکس هم جواب بده
اینو بگم که پیغام رو نشون نمیده و اگه آزمایش میکنید در کد باتن باید breakpoint بزارید تا اجرا شدنش رو ببینید
خب این کد html
<body class="stl_master_back" onclick ="validNavigation=false;" onload ="wireupEvents()">

خب اینم کد جاوااسکریپت
var validNavigation = false;

function wireupEvents() {
window.onbeforeunload = function () {
if (!validNavigation) {
CallFunction();
}
var xmlHttpObject = null;

try {
xmlHttpObject = new XMLHttpRequest();
if (window.event.pageX < 0 && window.event.pageY < 0){
//if (e.pageX + window.pageXOffset < 0 && e.pageY + window.pageYOffset < 0) {
CallFunction();
}
}
catch (ex) {
try {
xmlHttpObject = new ActiveXObject("Msxml2.XMLHTTP");
if (window.event.clientX < 0 && window.event.clientY < 0){
//if (e.clientX + document.documentElement.scrollLeft * 1 < 0 && e.clientY + document.documentElement.scrollTop * 1 < 0) {
CallFunction();
}
}
catch (ex) {
xmlHttpObject = new ActiveXObject("Microsoft.XMLHTTP");
if (window.event.clientX < 0 && window.event.clientY < 0){
//if (e.clientX + document.body.scrollLeft * 1 < 0 && e.clientY + document.body.scrollTop * 1 < 0) {
CallFunction();
}
}
}
}

$("a").bind("click",function() {
validNavigation = true;
});

$("form").bind("submit", function () {
validNavigation = true;
});

}

function CallFunction(){
var e = document.getElementById("btn");
if (e){
e.click();
}
}

خب اینم کد vb.net
Protected Sub btn_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btn.Click
ScriptManager.RegisterClientScriptBlock(Me, Me.GetType(), "alert", "alert('close tab')", True)
End Sub


لطفا راهنمایی کنید

saeed_sho
پنج شنبه 05 مرداد 1391, 10:38 صبح
با اینترنت اکسپلورر هم امتحان کردم هم برای بستن تب و هم برای بستن کل مرورگر جواب داد و مشکلی نبود و فقط این فایرفاکس که بستن کل مرورگرو جواب نمیده
اینم بگم با کروم هم هر دو مورد رو جواب میده شما میتونید بجای اون پیغام من هر کدی خواستین بزارین
در ضمن کدای جاوااسکریپت رو بهینه کردم اینم کدهاشه
var validNavigation = false;

function wireupEvents() {
window.onbeforeunload = function () {
if (!validNavigation) {
CallFunction();
}
else if (window.event.clientX < 0 && window.event.clientY < 0) {
CallFunction();
}
else if (window.event.pageX < 0 && window.event.pageY < 0) {
CallFunction();
}

}

$("a").bind("click",function() {
validNavigation = true;
});

$("form").bind("submit", function () {
validNavigation = true;
});

}

function CallFunction(){
var e = document.getElementById("btn");
if (e){
e.click();
}
}

اساتید عزیز لطفا راهنمایی کنند

salehbagheri
پنج شنبه 05 مرداد 1391, 17:27 عصر
برای اینکه بتونید بسته شدن تب های یک مرورگر رو مدیریت کنید باید از تابع onbeforeunload استفاده کنید ولی تا زمانی که مقداری به مرورگر باز نگردد، مرورگر، شما را از بسته شدن آن تب آگاه نمی کند!
برای حل این مشکل شما باید از کلمه کلیدی return استفاده کنید!

بدین صورت:

<script type="text/javascript">
$(document).ready(function () {
var validNavigation = false;
onbeforeunload = function (e) {
if (!validNavigation) {
return "Your Close Message!";
}

}
});
</script>


در این مثال من از jQuery هم استفاده کردم.

saeed_sho
پنج شنبه 05 مرداد 1391, 17:57 عصر
آقای باقری از توجهتون ممنونم
این شرط قسمت اولش برای بستن تب هستش و قسمت دوم و سومش برای زدن دکمه خروج خود مرورگر
قسمت اول درست کارمیکنه اما اگر شما میگید اینجوری اصولی تره خب چه بهتر که آدم اصولی کد بزنه
اگه کدهای منو دیده باشید من بعد از درست بودن شرط یه تابع رو صدا میزنم و به پیغام زیاد نیاز ندارم بیشتر برام مهمه که اون تابع اجرا بشه خب در این حالت return رو بعد از فراخوانی تابع بزارم؟
به پیغام احتیاج ندارم پس جلوی return چی بزارم؟
ممنون که این نکته رو یادآوری کردین
مشکل فایرفاکس روی قسمت دوم و سوم شرطه ببینید فایرفاکس برای مختصات از pagex و pagey استفاده میکنه و اینترنت اکسپلورر هم از clientx و clienty مشکل من اینه که همه ی مرورگرها موقع زدن دکمه خروج مرورگر توی این دوتا شرط به دام میافتن اما فایرفاکس دم به تله نمیده
ممنون میشم اینجا رو هم راهنمایی کنید

saeed_sho
پنج شنبه 05 مرداد 1391, 18:01 عصر
من jquery زیاد بلد نیستم او e که توی تابع گزاشتین چیه و چکار میکنه؟

salehbagheri
پنج شنبه 05 مرداد 1391, 22:52 عصر
تابع رو صدا میزنم و به پیغام زیاد نیاز ندارم بیشتر برام مهمه که اون تابع اجرا بشه

برای اجرای متدهای سمت سرور از سمت کلاینت، از AJAX کمک بگیرید.

به عنوان مثال: این (لینک (http://www.codeproject.com/Articles/400719/Calling-Server-Side-function-from-Client-Side-Scri))

saeed_sho
یک شنبه 08 مرداد 1391, 19:26 عصر
فکر کنم من سؤالم رو بد مطرح میکنم که سوء تفاهم پیش میاد بزارید یه جوره دیگه مطرح کنم
ببینید اگه کدهای منو نگاه کنید من یه if دارم که سه قسمته و قسمت اول برای بستن تب هستش که مشکلی نداره و باهاش کاری نداریم و دو تا else if دارم که اولی برای اینه که اگه دکمه X مرورگر یا همون دکمه قرمز خروج رو زد تابع توش اجرا بشه و برای اینترنت اکسپلورر و کروم هست که این دو تا مرورگر برای مختصات از clientX و clientY استفاده میکنند و اینجا هم مشکلی نداره و به خوبی اجرا میشه و else if دوم هم برای اینه که اگه کاربر دکمه X مرورگر فایرفاکس رو میزنه به دام بیفته که فایرفاکس برای مختصات از pageX و pageY استفاده میکنه حالا مشکل من اینه که مرورگرهای اینترنت اکسپلورر و کروم رو تست کردم توی else if اول به دام میفتن و تابع هم به درستی اجرا میشه اما با فایرفاکس دکمه X رو که میزنم از شرط else if دوم عبور میکنه مشکل من اینه که میخوام شرط بزارم همونجوری که اینترنت اکسپلورر و کروم به دام میفتن فایرفاکس هم به دام بیفته
لطفا راهنمایی کنید