في HTML ، هناك العديد من عناوين URL الشائعة:
عنوان URL النسبي:
example.php
Demo/example.php
./example.php
../../example.php
/example.php
عنوان URL المطلق:
http://dancewithnet.com/example.php
http://dancewithnet.com:80/example.php
https://dancewithnet.com/example.php
في الوقت نفسه ، هناك عدد كبير من قيم سمة العناصر في HTML. بشكل عام ، هناك طريقتان للحصول على قيم سمة URL هذه باستخدام JavaScript:
<a href = example.php id = example-a> في هذا الوقت تكون الصفحة url على الإطلاق http://dancewithnet.com/ </a>
<script>
var oa = document.getElementById ('example-a') ؛
oa.href == 'http://dancewithnet.com/example.php' ؛
oa.getAttribute ('href') == 'example.php' ؛
</script>
نأمل في الحصول على عنوان URL المطلق الكامل عن طريق الوصول مباشرة إلى السمات والحصول على قيمة السمة الأصلية من خلال طريقة getAttribute. في الواقع ، هذه نتيجة مثالية نسبيا. من بين جميع المتصفحات على مستوى A ، يمكن فقط لـ Firefox و IE8 الحصول على هذه النتيجة بنجاح. المتصفحات الأخرى لديها ظروف خاصة أكثر أو أقل. للحصول على سمات محددة للعناصر التي لديها أي نوع من الشروط ، يرجى الاطلاع على مثال العرض التوضيحي .
تكمن المشكلة في معظم المتصفحات في أن كلا الطريقتين تُرجع قيمة السمة الأصلية ، بينما في التطبيقات الفعلية ، ما هو مطلوب غالبًا هو عنوان URL المطلق. الحل في "التعامل مع قيم HREF غير المؤهلة" هو معقد للغاية. هنا حل بسيط نسبيا. سيكون الأمر بسيطًا جدًا إذا لم تفكر في الفرق بين رمز المتصفح:
<form action = example.php id = example-form>
في هذا الوقت ، فإن الصفحة هي url على الإطلاق http://dancewithnet.com/ </part>
<script>
var Oform = document.getElementById ('مثال الشكل') ؛
// IE6 ، IE7 ، Safari ، Chrome ، Opera
Oform.Action == 'example.php' ؛
oa.getAttribute ('Action') == 'example.php' ؛
// حل عام للحصول على عنوان URL المطلق
getQualifyUrl (Oform ، 'Action') == 'http://dancewithnet.com/example.php' ؛
getQualifyUrl = function (oel ، sattr) {
var surl = oel [sattr] ،
OD ،
BDO = خطأ ؛
// هل هي نسخة قبل IE8؟
//http://www.thespanner.co.uk/2009/01/29/detecting-browsers-javascript-hacks/
//http://msdn.microsoft.com/en-us/library/7kx09ct1٪28vs.80٪29.aspx
/*@cc_on
يحاول{
BDO = _jscript_version <5.8؟ صحيح: false ؛
} catch (e) {
BDO = خطأ ؛
}
@*/
// إذا كان Safari و Chrome و Opera
if (/a /.__ proto __ == '//' || /source/.test(/a/.tostring+ ''))
|| /^function /( /. test ([]. sort)) {
BDO = صحيح ؛
}
إذا (BDO) {
od = document.createElement ('div') ؛
/*
// لن تتغير النتائج التي تم الحصول عليها بواسطة عملية DOM
var oa = document.createElement ('a') ؛
oa.href = oel [sattr] ؛
OD.AppendChild (OA) ؛
*/
od.innerhtml = ['<a href =' ، surl ، '> </a>']. join ('') ؛
surl = od.firstchild.href ؛
}
عودة surl.
}
</script>
هناك بعض الأشياء الأكثر إثارة للاهتمام في المتصفحين ما قبل التاريخ ، IE6 و IE7. قيم السمة التي تم الحصول عليها من قبل الطريقتين في عناصر HTML A والمنطقة و IMG هي عناوين URL المطلقة. لحسن الحظ ، توفر Microsoft معلمة ثانية لـ GetAttribute لحل هذه المشكلة ، ويمكنها أيضًا حل مشكلة إرجاع السمات الأصلية لعناصر IFEAM و LINK:
<link href = ../../example.css id = example-link>
<a href = example.php id = example-a> في هذا الوقت تكون الصفحة url على الإطلاق http://dancewithnet.com/ </a>
<script>
var oa = document.getElementById ('example-a') ،
olink = document.getElementById ('example-a') ؛
oa.href == 'http://dancewithnet.com/example.php' ؛
oa.getAttribute ('href') == 'http://dancewithnet.com/example.php' ؛
oa.getAttribute ('href' ، 2) == 'example.php' ؛
olink.href == 'example.php' ؛
olink.getAttribute ('href') == 'example.php' ؛
olink.getattribute ('href' ، 4) == 'http://dancewithnet.com/example.php' ؛
</script>