В HTML общие URL-адреса представлены разными способами:
Относительный URL:
пример.php
демо/example.php
./пример.php
../../пример.php
/пример.php
Абсолютный URL:
http://dancewithnet.com/example.php
http://dancewithnet.com:80/example.php
https://dancewithnet.com/example.php
В то же время в HTML существует большое количество значений атрибутов элементов, которые являются URL-адресами. Как правило, существует два метода получения этих значений атрибутов URL-адресов с помощью JavaScript:
<a href="example.php" id="example-a">Абсолютный URL-адрес страницы на данный момент: http://dancewithnet.com/</a>
<скрипт>
var oA = document.getElementById('example-a');
oA.href == 'http://dancewithnet.com/example.php';
oA.getAttribute('href') == 'example.php';
</скрипт>
Мы надеемся получить полный абсолютный URL-адрес путем прямого доступа к атрибуту и получить исходное значение атрибута с помощью метода getAttribute. Фактически, это относительно идеальный результат. Среди всех браузеров уровня A только Firefox может успешно получить такой результат. Как и IE8, другие браузеры имеют более или менее особые случаи. См. демонстрационные примеры для определения конкретных атрибутов существующих элементов.
Проблема в большинстве браузеров заключается в том, что оба метода возвращают исходное значение атрибута, но в реальных приложениях часто требуется его абсолютный URL-адрес. Решение в разделе « Работа с неполными значениями HREF » слишком сложное. Вот относительно простое решение. что очень просто, если не учитывать разницу в коде браузера:
<form action="example.php" id="example-form">
Абсолютный URL-адрес страницы на данный момент: http://dancewithnet.com/</form>.
<скрипт>
var oForm = document.getElementById('пример-форма');
//IE6, IE7, Сафари, Хром, Опера
oForm.action == 'example.php';
oA.getAttribute('action') == 'example.php';
//Общее решение для получения абсолютного URL
getQualifyURL(oForm,'action') == 'http://dancewithnet.com/example.php';
getQualifyURL = функция (oEl, sAttr) {
вар sUrl = oEl[sAttr],
ОД,
бДо = ложь;
//Независимо от того, является ли это версией до 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 ?true: @false;
}поймать(е){
бДо = ложь;
}
@*/
//Если это Safari, Chrome и Opera
if(/a/.__proto__=='//' || /source/.test((/a/.toString+''))
|| /^функция (/.test([].sort)){
бДо = правда;
}
если (бДо) {
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;
}
вернуть URL-адрес;
}
</скрипт>
Есть еще несколько интересных особенностей двух доисторических браузеров IE6 и IE7. Все значения атрибутов, полученные двумя методами в элементах HTML A, AREA и IMG, являются абсолютными URL-адресами. К счастью , Microsoft предоставляет второй параметр для getAttribute. проблема может быть решена, и в то же время проблема, связанная с тем, что два упомянутых выше метода возвращают исходные атрибуты, также может быть решена для элементов IFEAM и LINK:
Исходный текст: http://dancewithnet.com/2009/07/27/get-right-url-from-html/
<link href="../../example.css" id="example-link">
<a href="example.php" id="example-a">Абсолютный URL-адрес страницы на данный момент: http://dancewithnet.com/</a>
<скрипт>
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';
</скрипт>