بازگشت به دوره

کار با اشیاء history و location

در مدل BOM چندین شئ مختلف وجود دارد که برای برقراری ارتباط با مرورگر و همچنین کسب اطلاعات در مورد مرورگر و محیط اجرای مرورگر به کار می‌روند. تمام این اشیاء متعلق به شئ window هستند. یعنی یکی از خاصیت‌های شئ window هستند. در این بخش به معرفی دو مورد از این اشیاء، یعنی شئ history و شئ location می‌پردازیم.

 

شئ history

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

در جاوا اسکریپت با استفاده از متدهای شئ history می‌توان عمل دکمه‌های Back و Forward را شبیه‌سازی کرد. با استفاده از متدهای back و forward از شئ history می‌توان به ترتیب به آدرس قبلی و آدرس بعدی در تاریخچه‌ی مرورگر مراجعه کرد. این متدها هیچ آرگومان ورودی دریافت نمی‌کنند و به سادگی می‌توان به شکل زیر از این متدها استفاده کرد.


history.back();
// یا
history.forward();

لازم به ذکر است که در یک پنجره‌ی مرورگر ممکن است چندین زبانه‌ی باز وجود داشته باشد. در این صورت هر یک از زبانه‌ها تاریخچه‌ی خاص خود را دارند و امکان دسترسی به تاریخچه‌ی یکدیگر را ندارند.

شئ history متد دیگری به نام go دارد که با استفاده از آن می‌توان چند گام به عقب یا به جلو حرکت کرد. این متد یک آرگومان ورودی دریافت می‌کند که تعداد گام‌ها را مشخص می‌کند. اعداد منفی به معنی حرکت به عقب و اعداد مثبت به معنی حرکت به جلو هستند. مثلاً دستور زیر موجب سه گام حرکت به عقب می‌شود.


history.go(-3);

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


history.length;
توجه کنید که مقداری که خاصیت length نشان می‌دهد، با در نظر گرفتن صفحه‌ی جاری محاسبه شده است. در نتیجه اگر مقدار این خاصیت n باشد، حداکثر گام‌هایی که می‌توان به جلو یا عقب حرکت کرد برابر با n - 1 است.

نکته : بنا به دلایل امنیتی امکان دسترسی به آدرس‌های ذخیره شده در تاریخچه‌ی مرورگر وجود ندارد.

 

شئ location

یکی دیگر از اشیاء پرکاربرد در مدل BOM شئ location است. لازم به ذکر است که این شئ علاوه بر اینکه یکی از خاصیت‌های شئ window است، یکی از خاصیت‌های شئ document نیز می‌باشد. یعنی هر دو خاصیت location در شئ window و شئ document یکسان هستند و هر دو به شئ واحدی اشاره می‌کنند.

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

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


location.href;
← "https://www.google.com/"

مشاهده می‌کنید که آدرس صفحه‌ی جاری در این خاصیت ذخیره شده است. توجه کنید که در صورت وجود Query String و یا Hash در آدرس صفحه‌ی جاری، این بخش‌ها نیز در خاصیت href ذخیره می‌شوند. حال دستور زیر را در کنسول وارد کنید.


location.href = 'http://otedia.com/';
← "http://otedia.com/"

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

سایر خاصیت‌های شئ location و مقدار ذخیره شده در هر یک عبارتند از :

مثال زیر مقدار هر یک از خاصیت‌های فوق را برای یک URL فرضی نمایش می‌دهد.


location.href;
← "http://otedia.com:8080/folder/file.php?q=javascript#samplehash"
location.hash;
← "#samplehash"
location.host;
← "otedia.com:8080"
location.hostname;
← "otedia.com"
location.pathname;
← "/folder/file.php"
location.port;
← "8080"
location.protocol;
← "https:"
location.search;
← "?q=javascript"
همچنین شئ location دارای ۳ متد به شرح زیر است.

قطعه کد زیر چند نمونه‌هایی از نحوه‌ی استفاده از این متدها را نشان می‌دهد.


location.assign('https://www.google.com');			// رفتن به صفحه‌ی جدید با امکان بازگشت

location.replace('https://www.google.com');		// رفتن به صفحه‌ی جدید بدون امکان بازگشت

location.reload();							// بارگذاری مجدد صفحه (احتمالاً از کش)

location.reload(true);						// بارگذاری مجدد صفحه (بدون استفاده از کش)