0

试试这个:在您的网站中创建一个文件夹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>

单击您喜欢的浏览器中的链接。网址是什么?

单击 IE 中的链接。网址是什么?

编辑:IE 带你到:http ://www.site.com/test/test/test.html?done !

有什么方法可以解决这个问题,不是(1)删除基本标签,(2)更改 onclick 以使用附加正确基数的函数?有没有办法覆盖 IE 中的 window.location.href 函数?

4

2 回答 2

1

这显然仍然是 IE11 中的一个问题。我刚才碰到了。我所做的是这样的:

onclick="window.location=document.getElementsByTagName('base')[0].href+'your_url_destination';"

它需要修改 onclick 行,但不需要单独的函数。它应该适用于所有浏览器,并且到目前为止对我来说。

于 2014-09-01T01:56:40.617 回答
0

将我移动test.htm到名为test(最终相对路径:)的子目录后test/test.htm,我能够确认该错误(我最初误解了您的要求)。谷歌搜索它还确认它是一个错误,或者至少是<base>标签的非标准实现(这可能只是微软没有按照规范遵循实现的另一种情况)。

IE 将尊重<base>任何已定义锚点的标记。

<a href="test/test.html">Click me</span>

将转到http://www.site.com/test/test.html(前提是<base>标签不是关闭的,或者对于旧版本的 IE 不是自关闭的),但 IE(所有版本)只会尊重锚点的基本标记,而不是 JavaScript。

IE 将附加内容添加test/到您的 URL 的原因实际上是符合标准的行为。由于 IE 忽略了该<base>标记,您的链接test/test.html表明存在一个子目录,该子目录使用相对于当前目录 ( )test的文件调用,并且 IE 正确导航到“test/test/test.html”。test.htmltest

至于怎么修...

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