PDA

View Full Version : نمایش صفحه فقط در ifram



barbodsoft.com
دوشنبه 03 خرداد 1389, 19:14 عصر
سلام دوستان
من تو وب سایتی که طراحی کردم. تعدادی از صفحات رو در ifram نمایش می دم. اگر این صفحات در خارج از ifram صفحه اصلی نمایش پیدا کنه ظاهر برنامه و اون چیزی که مد نظر ما بوده از بین می ره.

بعضی وقتا پیش می یاد که کاربر از طریق موتور های جستجو صفحه ای که قرار است در ifram نمایش یابد را پیدا کرده و خارج از ifram و به تنهای می بینه.
این دو صفحه رو ببینید متوجه منظورم خواهید شد.
http://modern-nour.com/
http://modern-nour.com/about.aspx

در صورتی که صفحه http://modern-nour.com/about.aspx باید در ifram صفحه اصلی نمایش یابد.



این تاپیک تقریبا حل شده محسوب می شه. البته یک سوال در پست 12 بی پاسخ مونده که اگه دوستان راه حلی داشته باشن عالی می شه
برای دیدن نتیجه به پست 13 مراجعه فرمایید.

Vahid_moghaddam
دوشنبه 03 خرداد 1389, 19:21 عصر
روشی که استفاده کردید، روش خوبی نیست. یکی از دلیل های خوب نبودنش همین چیزیه که برای شما پیش میاد. دلیل خاصی دارید که از این نوع طراحی استفاده کردید؟

barbodsoft.com
دوشنبه 03 خرداد 1389, 19:40 عصر
روشی که استفاده کردید، روش خوبی نیست. یکی از دلیل های خوب نبودنش همین چیزیه که برای شما پیش میاد. دلیل خاصی دارید که از این نوع طراحی استفاده کردید؟

راستش این اولین سایتی هست که من طراحی کردم و تجربه کافی نداشتم. ولی اگه این مشکل که در بالا گفتم نبود خیلی خوب جواب می ده.

آیا برای حل این مشکل پیشنهادی دارید؟

PhoenixNet
دوشنبه 03 خرداد 1389, 20:32 عصر
سلام

برای اینکار باید از جاوا اسکریپت استفاده کنی.


<script type="text/javascript">
function ContainIframe()
{
if( parent.document == null)
{
parent.document.location = "/Default.aspx";
}

}
</script>

این کد رو توی صفحاتی که داخا Iframe قرار میگیره بذار.اگر کاربر مستقیم فایل رو ببینه خود به خود یه آدرس Default.aspx میره.

barbodsoft.com
دوشنبه 03 خرداد 1389, 21:02 عصر
سلام

برای اینکار باید از جاوا اسکریپت استفاده کنی.


<script type="text/javascript">
function ContainIframe()
{
if( parent.document == null)
{
parent.document.location = "/Default.aspx";
}

}
</script>

این کد رو توی صفحاتی که داخا Iframe قرار میگیره بذار.اگر کاربر مستقیم فایل رو ببینه خود به خود یه آدرس Default.aspx میره.

من این کد رو در تگ head قرار دادم، فرقی نکرد. آیا باید به شکل دیگری ازش استفاده می کردم؟

alireza_s_84
دوشنبه 03 خرداد 1389, 21:09 عصر
سلام دوستان
من تو وب سایتی که طراحی کردم. تعدادی از صفحات رو در ifram نمایش می دم. اگر این صفحات در خارج از ifram صفحه اصلی نمایش پیدا کنه ظاهر برنامه و اون چیزی که مد نظر ما بوده از بین می ره.
بعضی وقتا پیش می یاد که کاربر از طریق موتور های جستجو صفحه ای که قرار است در ifram نمایش یابد را پیدا کرده و خارج از ifram و به تنهای می بینه.
این دو صفحه رو ببینید متوجه منظورم خواهید شد.
http://modern-nour.com/
http://modern-nour.com/about.aspx
در صورتی که صفحه http://modern-nour.com/about.aspx باید در ifram صفحه اصلی نمایش یابد.
سلام کد زیر رو توی رویداد PageLoad قرار بدین اینجوری اگر کسی صفحه رو مستقیما توی مرورگر باز کنه به صفحه اصلی سایت بگشت داده میشه.

String Refer = (Request.UrlReferrer == null) ? "" : Request.UrlReferrer.ToString();
if (String.IsNullOrEmpty(Refer) || Refer.Contains("parent.aspx") == false)
{
Response.Redirect("Index.aspx");
}

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

PhoenixNet
دوشنبه 03 خرداد 1389, 21:22 عصر
ببخشید


<body onload="ContainIframe();">

رو داخل صفحاتت باید بزاری که این تابع اجرا بشه.

barbodsoft.com
سه شنبه 04 خرداد 1389, 09:54 صبح
سلام
دوست عزیز جناب alireza_s_84 کدی که شما گذاشتید رو استفاده کردم. خطا زیر رو می ده
Object reference not set to an instance of an object.


ببخشید


<body onload="ContainIframe();">

رو داخل صفحاتت باید بزاری که این تابع اجرا بشه.

بازم اتفاق خاصی نیفتاد و صفحه خارج از ifram لود شد.

PhoenixNet
سه شنبه 04 خرداد 1389, 10:26 صبح
سلام

فایل ضمیمه رو دانلود کن یه نمونه برات گذاشتم.

alireza_s_84
سه شنبه 04 خرداد 1389, 10:48 صبح
دوست عزیز جناب alireza_s_84 کدی که شما گذاشتید رو استفاده کردم. خطا زیر رو می ده
Object reference not set to an instance of an object.
تصحیح کردم دوست عزیز توی همون پست ویرایش شد

barbodsoft.com
سه شنبه 04 خرداد 1389, 11:03 صبح
سلام

فایل ضمیمه رو دانلود کن یه نمونه برات گذاشتم.

درست شد.
بجای


parent.document.location = "/Default.aspx";

بایستی می نوشتم


parent.document.location = "Default.aspx";


ولی اول صفحه رو لود می کنه و بعد می ره به صفحه اصلی . آیا برای حل این مسئله چاره ای وجود دارد.

barbodsoft.com
سه شنبه 04 خرداد 1389, 11:21 صبح
تصحیح کردم دوست عزیز توی همون پست ویرایش شد


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

barbodsoft.com
سه شنبه 04 خرداد 1389, 19:56 عصر
سلام دوستان
ممنون از دوستان خوبم جناب alireza_s_84 و PhoenixNet هر دو روش جواب داد. از طريق اسکريپت نويسي ابتدا صفحه ناخواسته لود مي شه و سپس به صفحه مورد نظر(اصلي) هدايت مي شيم. کد نویسی سمت سرور هم مشکلی که در پست قبلی گفتم رو داره که اگه حل بشه به نظرم روش بهتر و قابل اعتماد تری هست.

براي اينکه دوستاني که بعدا مراجعه مي کنن سردرگم نشن خلاصه مطلب رو در زير قرار مي دم.
با توجه به راهنمايي که جناب PhoenixNet کردن از طريق اسکريپت نويسي
اين کد رو تو تگ head قرار دهيد.


<scripttype="text/javascript">
function ContainIframe() {
if (parent.document.getElementById('YourIframName') == null) {
parent.document.location = "Default.aspx";
}
}
</script>

و خواصيت onload تگ body رو به شکل زير قرار دهيد.


<body onload="ContainIframe();">


از روش کد نويسي سمت سرور
براي vb.net


Dim Refer As [String] = If((Request.UrlReferrer IsNothing), "", Request.UrlReferrer.ToString())
If [String].IsNullOrEmpty(Refer) OrElse Refer.Contains("parent.aspx") = FalseThen
Response.Redirect("Default.aspx")
EndIf

براي C#‎


String Refer = (Request.UrlReferrer == null) ? "" : Request.UrlReferrer.ToString();
if (String.IsNullOrEmpty(Refer) || Refer.Contains("parent.aspx") == false)
{
Response.Redirect("Index.aspx");
}


موفق باشيد.

alireza_s_84
سه شنبه 04 خرداد 1389, 20:59 عصر
حالا دیگه صفحه مورد نظر مون رو تو ifram نمایش نمی ده. یعنی وقتی می خوای صفحه در درباره ما رو تو ifram نمایش بدی دایرکت می شه به صفحه اصلی و داخل ifram صفحه اصلی رو نمایش می ده.
از روش اسکریپت درست انجام شد. ولی مشکل اینکه اول صفحه رو لود می کنه و بعد می ره به صفحه اصلی .
دوست من شما باید به جای parent.aspx باید آدرس صفحه ی خودت رو بذاری که Iframe ها توی اون قرار دارن به همین دلیله که چون صفحه معرف parent.aspx نیست شما redirect میشی به index شما این صفحه رو ویرایش کن من خودم برای جلوگیری از مشاهده سورس اسکریپت ها و ادیتورم از این روش استفاده میکنم.
موفق باشید