Я гуглил некоторое время и, может казаться, не нахожу ответ на этот вопрос. Моя проблема следующие:
Для моего jQuery мне нужны мои ссылки, чтобы быть относительным, а не абсолютным. Мой PHP установлен возвратить относительные URL, и все хорошо работает, пока я не тестирую его в IE7. По некоторым причинам IE7 продолжает изменять мои относительные URL на abosulute, который повреждает мой js сценарий. Действительно ли это нормально? Существует ли способ обойти его?
Например:
IE8, Chrome, Firefox, Safari и т.д. -
<a href='/page' onclick='click_handler(this);return false;'>clicky</a>
IE7 -
<a href='http://www.myurl.com/page' onclick='click_handler(this);return false;'>clicky</a>
Что я делаю, так это захватываю baseUrl при init, например:
var baseUrl = window.location.href.substring(0, window.location.href.lastIndexOf("/") + 1);
... а затем в своем обработчике URL отделяю baseUrl:
var url = $(this).attr("href").replace(baseUrl, "");
Также вы можете проверить, "нормализован" ли href, используя . support()
:
$.support.hrefNormalized
(возвращает true
, если браузер не вносит изменений при захвате значения href, поэтому в IE это значение сейчас false)
Верно, похоже, лучший способ сделать это - убрать домен в jQuery. Для тех, у кого есть подобная проблема, вот как выглядит мой обработчик события клика:
var href_attr = element.getAttribute('href');
if (href_attr.indexOf('http://')>-1) {
href_attr = href_attr.substr(location.href.length-1);
};
Похоже, это как-то связано с проблемами безопасности - http://blogs.msdn.com/ie/archive/2005/08/15/452006.aspx
На вашем месте я бы использовал определение браузера и добавил условие, чтобы разделить URL до относительного пути. Я не знаком с jQuery на 100%, но я представляю, что вы можете сделать это с помощью простого разделения и восстановления или REGEX-запроса.
См. jQuery URL Parser Plugin: http://plugins.jquery.com/project/url_parser