尝试此操作:在您的网站中创建一个文件夹test
,并将此html文件(test.html
)放入其中:
<html><head>
<base href="http://www.site.com/" />
</head><body>
<span onclick="window.location.href='test/test.html?done!';return false;">click me</span>
</body></html>
点击您喜欢的浏览器中的链接。什么是URL?
单击IE中的链接。什么是URL?
编辑:IE将您带到:http://www.site.com/test/test/test.html?done!
任何解决这个问题的方法,都不是(1)删除基本标记,(2)更改onclick以使用附加正确基数的函数?有没有办法覆盖IE中的window.location.href函数?
答案 0 :(得分:1)
这在IE11中显然仍然是一个问题。我刚刚遇到它。我所做的就是:
onclick="window.location=document.getElementsByTagName('base')[0].href+'your_url_destination';"
它需要修改onclick行,但它不需要单独的函数。它应该适用于所有浏览器,并且到目前为止对我来说。
答案 1 :(得分:0)
将我的test.htm
移动到名为test
的子目录(最终相对路径:test/test.htm
)后,我能够确认错误(我最初误解了您的问题)。 Googling it also confirms that it is a bug,或者至少是<base>
标记的非标准实现(这可能仅仅是另一种情况的Microsoft未按照规范执行实现)。< / p>
IE将尊重任何已定义锚点的<base>
标记。
<a href="test/test.html">Click me</span>
将转到http://www.site.com/test/test.html
(前提是<base>
标记未关闭,或者对于旧版本的IE不自动关闭),但IE(所有版本)仅支持基本标记锚点,不适用于JavaScript。
IE在您的URL之前添加test/
的原因实际上是符合标准的行为。由于IE忽略了<base>
标记,因此test/test.html
的链接表示存在一个名为test
的子目录,其中包含相对于当前目录的test.html
文件test
})和IE正确导航到`test / test / test.html'。
至于如何解决它......
<base>
代码无济于事。onclick
更改为返回正确基本URL的函数可行,但您已声明这是不可接受的。window.location.href
是一个字符串,而不是一个函数,所以“覆盖”它是一个非首发。onclick
更改为使用绝对网址也可以。onclick
属性并通过JavaScript(attachEvent
或addEventListener
)分配这些属性从长远来看(内容/行为分离)会更有效,并让您轻松附上正确的基本网址(以及我可能选择的方法,虽然我不知道您的具体情况)。onclick
属性,并将URL更新为绝对URL。