Javascript onclick with base tag in ie with subfolder

时间:2012-10-20 18:05:36

标签: javascript internet-explorer onclick base

尝试此操作:在您的网站中创建一个文件夹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函数?

2 个答案:

答案 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'。

至于如何解决它......

  1. 删除<base>代码无济于事。
  2. onclick更改为返回正确基本URL的函数可行,但您已声明这是不可接受的。
  3. window.location.href是一个字符串,而不是一个函数,所以“覆盖”它是一个非首发。
  4. onclick更改为使用绝对网址也可以。
  5. 删除所有嵌入的onclick属性并通过JavaScript(attachEventaddEventListener)分配这些属性从长远来看(内容/行为分离)会更有效,并让您轻松附上正确的基本网址(以及我可能选择的方法,虽然我不知道您的具体情况)。
  6. 您可以使用DOM操作库(如jQuery / Dojo / Prototype)循环遍历任何onclick属性,并将URL更新为绝对URL。
相关问题