Javascript 设置后,在HTML中获取BASE,但不使用页面URL
构建HTML页面时,在php中动态设置基准:Javascript 设置后,在HTML中获取BASE,但不使用页面URL,javascript,html,base,Javascript,Html,Base,构建HTML页面时,在php中动态设置基准: $base_line = '<base href="' . $some_path . '/" /> '; echo $base_line; $base\u line=''; echo$基线; 现在我在HTML页面中,我需要访问这些信息($some_path),搜索了几个小时后,我似乎没有找到答案。请注意,加载的HTML页面有一个与基无关的URL,我没有访问PHP代码来修改它。加载的页面可以有一个URL,如:,但页面中的所有其他链接都将
$base_line = '<base href="' . $some_path . '/" /> ';
echo $base_line;
$base\u line='';
echo$基线;
现在我在HTML页面中,我需要访问这些信息($some_path),搜索了几个小时后,我似乎没有找到答案。请注意,加载的HTML页面有一个与基无关的URL,我没有访问PHP代码来修改它。加载的页面可以有一个URL,如:,但页面中的所有其他链接都将基于基设置的值,因此我无法使用页面URL获取基
我想我可以抓取其中一个元素,比如一个图像,然后使用DOM对其进行剖析以找到基础,但应该有一种更简单的方法来实现这一点。有什么想法吗
在这种情况下,使用window.location不起作用,因为它将返回与加载的页面URL相关的内容,而不是其中设置为基础的内容。如果您没有访问PHP的权限,可以尝试使用javascript
window.location.hostname
如果你想要像
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函数更新3 正如@jorgecasar所提到的,现在每个
节点上都有一个属性,baseURI
(包括每个元素)
调用document.baseURI
将获得页面的基本路径,并考虑
标记
请注意,这是所有现代浏览器都支持的最新ish属性,但如果您使用的是较旧的浏览器,您可能希望坚持使用较旧的答案,或者确保有一个poly或ponyfill(Babel的标准polyfill似乎包括一个,尽管我找不到具体的文档这么说)
另外,请注意,document.baseURI
将为您提供完全限定的绝对路径,而从
获取href
属性将为您提供准确的值,因此这两个属性的用法可能略有不同
原创
如果要获取基本元素的值,可以执行以下操作:
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
如果没有
,则可能为空
更新2:不要使用getElementsByTagName()
,而是使用querySelector()
:
var base=(document.querySelector('base')| |{}).href;
控制台日志(基本)代码>
如果您使用的是jqLite(angularjs默认值),则代码如下所示:
base = angular.element(document.querySelector('base')).attr('href')
有关更多详细信息,请参阅。不需要jquery、jqlite或过时的API。使用较新的querySelector
API:
var base = document.querySelector('base');
var baseUrl = base && base.href || '';
我遇到的一个问题是,使用element.href
无法准确返回设置的内容。例如,如果您有:
<base href="/some/sub/directory/" />
我发现使用jQueryattr
函数可以避免这种情况:
$("base").attr("href")
# /some/sub/directory/
document.getElementsByTagName('base')[0].getAttribute("href")
# /some/sub/directory/
如果要避免使用jQuery,还可以使用getAttribute
函数:
$("base").attr("href")
# /some/sub/directory/
document.getElementsByTagName('base')[0].getAttribute("href")
# /some/sub/directory/
每个节点都有一个只读属性,该属性返回绝对基本URL,如果无法获取绝对URI,则返回null
要获取文档的基本URL,可以使用:document.baseURI
如果只需要路径名或URL的任何其他部分,则可以创建对象:
您是否尝试过document.getElementsByTagName('base')
?在任何情况下,BASE
都是您应该尽量避免的。它在各种浏览器中都有奇怪的效果,包括尝试从基本位置和非基本位置加载JS两次。我不知道这将如何告诉您基本位置。@Alien,这将返回页面的基本位置,而不是基本位置。@Alien,我知道这可能会让人困惑,但是我尝试了:我想要的是当前页面头部设置的基,而不是页面URL的基。您可以加载一个页面,但将该页面中的base设置为,并使test.php中的所有相关链接都由设置为base的内容提供服务。我希望这能澄清问题:-)您能补充一些解释吗?但解决方案提供的用途比完成如此简单的任务需要角度更好。即使在应用程序中使用angular,该解决方案也能正常工作,就像所有的vanilla js解决方案一样:)如果使用angular,则使用angular的方式更简洁:base=$document.find('base').attr('href')
,我只需为
等
分配一个id,然后document.getElementById('myBase')).href
@Blaise为什么要添加额外的不必要的HTML?我更新了答案,加入了有关baseURI
的信息。最近我自己也在使用它。@samanime你可以像添加链接一样添加一个指向答案的链接。谢谢