Получить базу в 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')

посмотреть угловое документа для получения более подробной информации.