使用JavaScript将基标记附加到头部

使用JavaScript将基标记附加到头部,javascript,html,Javascript,Html,您能否使用JavaScript将base标记从文档的body中的div附加到文档的头部?我的意思是,这样做有什么缺点?我担心的是,我会遇到一种竞争条件,因为base标记被理解为存在于头部中,因此如果页面已经呈现,它将不会得到尊重。我还没有遇到过这个问题,但我想知道这是否应该引起关注 我知道如何通过JavaScript实现这一点。我的问题是,如果在页面加载/呈现后将标记附加到DOM中,是否会尊重/尊重该标记 我的代码是一个HTML片段,可能会出现在正文中,但我需要设置base标记,因为我的资产是相

您能否使用JavaScript将
base
标记从文档的
body
中的
div
附加到文档的头部?我的意思是,这样做有什么缺点?我担心的是,我会遇到一种竞争条件,因为
base
标记被理解为存在于
头部
中,因此如果页面已经呈现,它将不会得到尊重。我还没有遇到过这个问题,但我想知道这是否应该引起关注

我知道如何通过JavaScript实现这一点。我的问题是,如果在页面加载/呈现后将标记附加到DOM中,是否会尊重/尊重该标记

我的代码是一个HTML片段,可能会出现在
正文中
,但我需要设置
base
标记,因为我的资产是相对引用的。让我们假设我不能改变这一点(因为我不能。至少,不能马上改变)。您还可以假设设置
base
不会破坏任何不是我的HTML片段的内容,并且没有任何其他
base
标记……我可能错了(或者部分错了,具体取决于每个浏览器选择如何实现),但假设文档URL库只被解析一次。当您将该基本元素附加到DOM时,已经太晚了

编辑:看来我错了

显然。但搜索引擎也有缺点。

是的,例如:

<script>
var base = document.createElement('base');
base.href = 'http://www.w3.org/';
document.getElementsByTagName('head')[0].appendChild(base);
</script>

var base=document.createElement('base');
base.href=http://www.w3.org/';
document.getElementsByTagName('head')[0].appendChild(base);

我不明白你为什么要这样做,但这是可能的。

Jukka要回答你为什么要这样做的问题

示例。

一种移动应用程序,如
phonegap
,它是一个围绕webapp的薄包装,但足够聪明,可以知道它是在浏览器中还是在设备上运行

一旦它知道它在一个设备上,那么它需要知道基本的
url
,这样它就可以正确地定位以前被称为相对
url
s的所有内容

在我们的例子中,我们有4个不同的系统,
dev
test
beta
live
,每个系统都有不同的
URL
s

通常更改是增量的,但很多时候我们确实希望在每个系统之间来回测试,例如在a/b测试中

由于路由布局基本相同,因此在基本
URL
上来回切换非常有意义

请记住,许多web应用程序都使用静态资产,例如用于应用程序框架的html页面、用于粘合逻辑的javascript以及基于web的后端,这些后端实际上只是数据库上的一个薄层。例如,我的意思是应用程序经常是这样的

以这种方式构建应用程序在可伸缩性和响应性方面提供了惊人的速度,因为“web”服务器不必像模板语言那样慢到足以构建页面视图的程度

无论如何,设置基本
url
意味着能够动态地更改应用程序数据的来源,并且由于代码重用,可以极大地提高开发人员的生产效率

搜索引擎? 曾经有一段时间,搜索引擎爬行机器人无法“理解”或运行任何Javascript代码。在这种情况下,这样的机器人将获得所有的链接错误,爬行将停止在那里


因此,基本上,它可能会妨碍一些爬虫对您的链接进行爬网和索引。

设置
以使您的相对引用正常工作,这可能会破坏页面上的其他引用吗?我们可以假设不会发生这种情况。啊,是的,我听说过这一点。但是如果页面加载时没有
base
标记,那么一些JavaScript会向DOM追加
base
标记,会发生什么呢?这个标签会得到尊重吗?我的意思是:URL基设置在头部,在解析/执行身体中的任何内容之前。一旦设置好了,附加一个基本元素就没有用了。但是我没有做实验。好的,我现在明白了:)我仍然想知道
文档。write
正文中是否100%有效…document.write有效,因为它正在重写浏览器将解析的HTML。因此,它触发解析,然后触发整个电路,包括基本标签。但是,请注意,使用document.write输出的内容就在脚本所在的位置。因此,我不确定与PHP标记相比,您会获得多少好处。我主要担心的是,如果您在页面加载/呈现后执行此操作,那么
base
标记将被忽略/不被尊重。这是一个合理的担忧吗?你似乎已经改变了问题。关于您现在询问的缺点,最明显的是,当禁用脚本时,该技术将不起作用(因此搜索引擎将错误地查看文档)。请解释原始问题,而不是假设的解决方案。如果您只能处理HTML片段,那么尝试做具有全局效果的事情通常是错误的。