如何在Javascript中设置页面的基本href?

yxyvkwin  于 2023-05-16  发布在  Java
关注(0)|答案(5)|浏览(116)

我想设置一个网页的基本href属性在Javascript的基础上关闭的当前主机名。我已经生成了可以在不同主机名上查看的HTML页面,这意味着生成一个基本href标记将在一个主机名中工作,但在另一个主机名中将不正确。

doinxwow

doinxwow1#

正确的方法是根据当前主机名对标记执行document.write:

正确:

<script type="text/javascript">
document.write("<base href='http://" + document.location.host + "' />");
</script>

此方法已在IE、FF、Chrome和Safari中生成正确的结果。它产生的(正确)结果与执行以下操作不同:

不正确:

<script type="text/javascript">
var newBase = document.createElement("base");
newBase.setAttribute("href", document.location.hostname);
document.getElementsByTagName("head")[0].appendChild(newBase);
</script>
46qrfjad

46qrfjad2#

我想你最好这样做

<script type="text/javascript">
        document.head.innerHTML = document.head.innerHTML + "<base href='" + document.location.href + "' />";
    </script>

由于location.hostname不返回应用上下文根!您还可以在控制台console.log上记录document.location,以查看document.location上所有可用的元数据。

ulmd4ohb

ulmd4ohb3#

我不同意最高的答案。它不考虑协议,因此将失败。
我必须考虑协议/主机/端口的工作解决方案如下

var base = document.createElement('base');
    base.href = window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : '');
    document.getElementsByTagName('head')[0].appendChild(base);

目前,这在所有主流浏览器(包括IE11)中都能正常工作
我已经用这个做了一个npm包,如果有人感兴趣的话,它也支持在这个基href的末尾添加后缀
https://www.npmjs.com/package/dynamic-base
https://github.com/codymikol/dynamic-base

iklwldmw

iklwldmw4#

document.write(“”);

<script>
document.write("<base href='"+ window.location.protocol +'//' + window.location.host + "' >");
</script>
hof1towb

hof1towb5#

window.document.head.innerHTML=`<base href=${href}>`+window.document.head.innerHTML;

href变量是您要使用的href。

相关问题