15

当构建 HTML 页面时,base 会在 php 中动态设置:

$base_line = '<base href="' . $some_path . '/" /> ';
echo $base_line;

现在我在 HTML 页面中,我需要访问此信息 ($some_path),并且在搜索了几个小时后,我似乎没有找到答案。请注意,加载的 HTML 页面有一个与基础无关的 URL,我无权访问 PHP 代码来修改它。加载的页面可能具有如下 URL:http://xyz.com/index.php,但页面中的所有其他链接都将基于基础设置的值,因此我无法使用页面 URL 获取基础.

我想我可以抓取其中一个元素,如图像并使用 DOM 剖析它以找到基础,但应该有一种更简单的方法来做到这一点。有任何想法吗?

在这种情况下使用 window.location 不起作用,因为它将返回与加载的页面 URL 相关的内容,而不是在其中设置为基础的内容。

4

6 回答 6

42

更新 3

正如@jorgecasar在下面的回答中提到的那样,现在baseURI每个Node(包括每个Element)都有一个属性。

document.baseURI考虑到<base>标签,调用将为您提供页面的基本路径。

请注意,它是所有现代浏览器都支持的最新属性,但如果您使用的是较旧的浏览器,您可能想要坚持使用较旧的答案,或者确保您有一个 poly- 或 ponyfill (Babel 的标准 polyfill似乎包括一个,虽然我找不到具体的文件说这么多)。

另外,请注意,这document.baseURI将为您提供完全限定的绝对路径,而href从中获取属性<base>将为您提供您提供的确切值,因此两者的用法可能略有不同。


原来的

如果要获取基本元素的值,可以执行以下操作:

var baseHref = document.getElementsByTagName('base')[0].href

或者更安全一点:

var bases = document.getElementsByTagName('base');
var baseHref = null;

if (bases.length > 0) {
    baseHref = bases[0].href;
}

更新:更简洁的方法是:

const baseHref = (document.getElementsByTagName('base')[0] || {}).href;

baseHref如果没有<base>.


更新 2:而不是使用getElementsByTagName(),使用querySelector()

var base = (document.querySelector('base') || {}).href;
console.log(base);
<base href="http://www.google.com"/>

于 2012-12-12T04:25:08.620 回答
10

不需要 jquery、jqlite 或过时的 API。使用较新的querySelectorAPI:

var base = document.querySelector('base');
var baseUrl = base && base.href || '';
于 2015-05-23T11:05:22.267 回答
6

我遇到的一个问题是 usingelement.href不能准确返回设置的内容。例如,如果你有这个:

<base href="/some/sub/directory/" />

然后element.href会给你:

document.getElementsByTagName('base')[0].href
# http://example.com/some/sub/directory/

我发现你可以通过使用 jQueryattr函数来避免这种情况:

$("base").attr("href")
# /some/sub/directory/

如果要避免使用 jQuery,还可以使用该getAttribute函数:

document.getElementsByTagName('base')[0].getAttribute("href")
# /some/sub/directory/
于 2017-03-22T06:32:18.000 回答
3

每个节点都有一个只读属性baseURI,它返回绝对基 URL,如果无法获得绝对 URI,则返回 null。

要获取文档的基本 URL,您可以使用:document.baseURI.

如果您只需要路径名或 URL 的任何其他部分,您可以创建一个URL对象:

var baseLocation = new URL(document.baseURI);
var pathname = baseLocation.pathname;
于 2019-04-30T13:34:34.953 回答
-1

window.location.hostname如果您无权访问 PHP,可以尝试使用 javascript

如果你想要类似的东西

http://www.example.com/blahblah/blah.html

比这三件事付诸行动

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 功能

于 2012-12-12T04:20:39.470 回答
-1

如果您使用的是 jqLit​​e(默认的 angularjs),代码如下所示:

base = angular.element(document.querySelector('base')).attr('href')

有关更多详细信息,请参阅角度文档

于 2015-05-08T15:20:27.303 回答