【问题标题】:Javascript onclick with base tag in ie with subfolder带有基本标记的Javascript onclick,即带有子文件夹
【发布时间】:2012-10-20 18:05:35
【问题描述】:

试试这个:在你的网站上创建一个文件夹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 函数?

【问题讨论】:

  • 如果您说出您所看到的,我可能会尝试回答这个问题,而不是让我尝试一下。修辞问题令人难忘,但不是很透明。
  • IE 带你到:http://www.site.com/test/test/test.html?done!

标签: javascript internet-explorer onclick base


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    将我的test.htm 移动到名为test 的子目录(最终相对路径:test/test.htm)后,我能够确认该错误(我最初误解了您的问题)。 Googling it also confirms that it is a bug,或者至少是&lt;base&gt; 标记的非标准实现(这可能只是另一种情况,Microsoft 不遵循规范的实现)。

    IE 将尊重任何已定义锚点的 &lt;base&gt; 标记。

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

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

    IE 将额外的test/ 添加到您的 URL 的原因实际上是符合标准的行为。由于 IE 忽略了&lt;base&gt; 标记,您的test/test.html 链接表明存在一个名为test 的子目录,其中包含相对于当前目录(test)的test.html 文件,并且 IE 正确导航到`test/测试/test.html'。

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

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

    【讨论】:

    • 嗨皮特。不应该有文件C:\Users\Pete\Desktop\test.htmltest.html 文件应该只存在于文件夹 test 中(另外,只有 1 个 html 文件,而不是 test.htmtest.html)。在我的实际应用程序中,我有一个文件夹reports。在该文件夹中,我有一个默认页面,其中列出了所有报告页面的链接和链接,其中包含相对 url 和基本标记,例如 reports\report1.html。如果我使用&lt;a href='reports\report1.html'&gt;,那么base 标签是很荣幸的。但是,如果我使用 javascript onlick location.href,它会失败,因为它会尝试转到 \reports\reports\report1.html
    • @SeanW:已确认错误。更新了答案。
    • 谢谢皮特。我已将其标记为答案,尽管这不是我想要的答案。
    猜你喜欢
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 2016-09-08
    相关资源
    最近更新 更多