Получить базу в HTML после ее установки, но не используя URL страницы
база динамически устанавливается в php при построении HTML-страницы:
$base_line = '<base href="' . $some_path . '/" /> ';
echo $base_line;
теперь, когда я нахожусь на странице HTML, мне нужно получить доступ к этой информации ($some_path), и после поиска в течение нескольких часов я, похоже, не нахожу ответа. Обратите внимание, что загруженная HTML-страница имеет URL-адрес, который не связан с базой, и у меня нет доступа к PHP-коду для его изменения. Загруженная страница может иметь URL-адрес, например:http://xyz.com/index.php, но все остальные ссылки на странице будет основываться на значении, установленном базой, поэтому я не могу получить базу с помощью URL-адреса страницы.
Я полагаю, что могу захватить один из элементов, таких как изображение, и рассечь его с помощью DOM, чтобы найти базу, но должен быть более простой способ сделать это. Есть идеи?
через окно.location не работает в этой ситуации, поскольку он вернет то, что связано с URL загруженной страницы, а не то, что было установлено в качестве базы внутри него.
5 ответов
если вы хотите получить значение из Базового элемента, вы можете сделать что-то вроде:
var baseHref = document.getElementsByTagName('base')[0].href
или, чтобы быть немного безопаснее:
var bases = document.getElementsByTagName('base');
var baseHref = null;
if (bases.length > 0) {
baseHref = bases[0].href;
}
Update: более сжатым способом было бы:
const baseHref = (document.getElementsByTagName('base')[0] || {}).href;
baseHref
может быть null, если у него нет <base>
.
нет необходимости в jQuery, jqlite или устаревших API. Используйте новый querySelector
API:
var base = document.querySelector('base');
var baseUrl = base && base.href || '';
одна проблема, с которой я столкнулся, - это использование element.href
не возвращает точно то, что установлено. Например, если у вас есть это:
<base href="/some/sub/directory/" />
затем element.href
даст вам:
document.getElementsByTagName('base')[0].href
# http://example.com/some/sub/directory/
я обнаружил, что вы можете избежать этого, используя jQuery attr
функция:
$("base").attr("href")
# /some/sub/directory/
если вы хотите избежать jQuery, вы также можете использовать getAttribute
функция:
document.getElementsByTagName('base')[0].getAttribute("href")
# /some/sub/directory/
вы можете попробовать использовать javascript window.location.hostname
Если у вас нет доступа к PHP
Если вы хотите что-то вроде
http://www.example.com/blahblah/blah.html
чем эти 3 вещи приходят в действие
window.location.protocol = "http"
window.location.host = "example.com"
window.location.pathname = "blahblah/blah.html"
var url = window.location.protocol + "://" + window.location.host + "/" + window.location.pathname;
вы можете посмотреть это статьи для базовой функции url
Если вы используете jqLite (по умолчанию angularjs), код выглядит так:
base = angular.element(document.querySelector('base')).attr('href')
посмотреть угловое документа для получения более подробной информации.