【问题标题】:Why would Chrome and Firefox handle Javascript links differently?为什么 Chrome 和 Firefox 会以不同的方式处理 Javascript 链接?
【发布时间】:2012-01-27 05:41:32
【问题描述】:

我有一个在 FireFox 9.0.1 中完美运行的网站。

在 Chrome 16 中,它发生了灾难性的失败。错误太多,无法全部解决。

但是,要从一个问题开始(并希望它是有助于阐明核心问题的线索),我有一些由 Javascript 驱动的按钮,可以简单地将某人带到一个新页面。

这些按钮的代码非常简单:

var siteURL = "http://mywebsite.com/";
function goHome()
{
    window.location = siteURL + "index.html";
}

在 FireFox 中,如果我单击执行此代码的按钮,我会转到 index.html。轻松愉快。

在 Chrome 中,如果我点击此按钮,我会收到一个 404 错误页面,上面写着:

在此服务器上找不到请求的 URL /undefinedindex.html。

为什么这些浏览器的行为不同?

如何让 Chrome 一起玩?


根据 cmets 的要求,我将alert(siteURL); 放入函数中。

Firefox 输出:

http://mywebsite.com/

Chrome 输出

未定义

【问题讨论】:

  • 全球siteURL从何而来?您应该调试一下为什么 siteURL 在 chrome 中未定义。
  • 在分配给window.location之前将'alert(siteURL);'放入该函数并告诉我们它打印的内容。
  • 另外,你为什么要使用 Javascript 来做一些<a> 会免费为你做的事情?
  • 我想你会发现 Chrome 会先进行连接以获取 "undefinedindex.html",但随后会假设前面有一个 "/",因为该字符串不包含路径。 (你可以通过说window.location="index.html"; 来测试。)所以不要担心斜线,担心为什么siteURL 是未定义的。
  • @xdazz:是的,我可以并且愿意,但是 Firefox 怎么可能认为它已经定义而 Chrome 没有?变量是否已定义,不是吗?这不是任何一个浏览器的两组代码,而是完全相同的代码,那么为什么浏览器会以不同的方式看待同一个变量呢?

标签: javascript firefox google-chrome


【解决方案1】:

这适用于 Chrome 16:

<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
window.siteURL = "http://mywebsite.com/";
function goHome() {
    console.log('moo?');
    window.location.href = window.siteURL + "index.html";
}
</script>

</head>
<body>

    <a href="#" onclick="goHome(); return false;">go home</a>

</body>

</html>

【讨论】:

  • 不幸的是,这导致整个网站在 FireFox、Chrome 和我的 IDE (NetBeans) 中都崩溃了。
  • tbh 知道完全相同的脚本适用于其他人是有帮助的。告诉你你的设置是 fscked。
  • 如果没有具体说明原因,这可能意味着 您的 设置是特殊设置。
  • 我现在看到了我的方式的错误。我误读了你的代码,我正在写var window.siteURL = 'mysite.com',但是(由于我不清楚的原因),如果有人切换到使用window,那么就不需要将var 声明放在前面。哦……等等……因为window 已经被声明了。我现在明白了。我仍然不知道为什么 Chrome 更喜欢这个,但它确实有效,而且我已经学会了接受浏览器的神秘意志。感谢您的代码!
【解决方案2】:

您不应使用window.location.,而是将网址分配给window.location.href

所以应该是

function goHome()
{
    window.location.href = siteURL + "index.html";
}

而且...您得到那个“未定义”值是因为您可能没有为 siteURL 分配任何值,或者您忘记声明它。确保它确实指向你当前的根 url(如果你想要的话)

【讨论】:

  • 抱歉,但很明显我确实指定了 siteURL,因为 FireFox 可以找到它。我可以相信,代码的解释方式可能存在某种差异,但如果只是未声明,它永远不会适用于任一浏览器。但是,对于使用 .href 的提示 +1。
【解决方案3】:

如果所有浏览器的行为完全相同,我就会失业。

如果不看完整的代码,就不可能知道到底出了什么问题。

从sn-p abobe判断,一定有其他函数(与goHome在同一范围内)将undefined分配给siteURL并在goHome之前被调用

【讨论】:

    猜你喜欢
    • 2013-05-18
    • 2020-09-27
    • 2013-01-12
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 2023-01-15
    • 2021-12-24
    相关资源
    最近更新 更多