حل عناوين URL النسبية في JavaScript
-
30-09-2019 - |
سؤال
أقوم بإنشاء مكتبة JS تتطلب النظر في قيم النموذج [الإجراء] و[href] وحلها في عناوين URL مطلقة.
على سبيل المثال، أنا على http://a/b/c/d;p?q وتواجه قيمة href لـ "../g" (بافتراض عدم وجود عنصر <base>).المطلق الناتج سيكون: http://أ/ب/ز.
هل هناك مكتبة JS تقوم بذلك بالفعل؟يجب أن أصدق ذلك.
لمزيد من المعلومات حول ما هو مطلوب، المواصفات:http://tools.ietf.org/html/rfc3986#section-5.4
المحلول
وتبين أن .href
سمة عنصر (وليس .getAttribute('href')
, ، لكن .href
) تقوم بإرجاع عنوان URL (المطلق) الذي تم حله.
نصائح أخرى
في المتصفحات الحديثة، يعالج مُنشئ عنوان URL المدمج ما يلي:
u = (new URL("?newSearch",
"http://a.example/with/a/long/path.file?search#fragment")).href
(عائدات http://a.example/with/a/long/path.file?newSearch
)
إذا كنت تريد أن تكون القاعدة مرتبطة بالمستند الحالي، فيمكنك القيام بذلك بشكل صريح:
u = (new URL("?newSearch", document.location)).href
ال URL
يمنحك الكائن أيضًا إمكانية الوصول إلى كافة مكونات عنوان URL (البروتوكول، والمضيف، والمسار، والبحث، والتجزئة، وما إلى ذلك).
حل JS نقي لطيف يعمل بدون DOM: https://Gist.github.com/1088850 (يعمل في كل مكان ولكنه مفيد بشكل خاص لـ JS من جانب الخادم).