2

我被我面临的这个问题所困扰location.replace。我需要模拟 HTTP 重定向(我不希望我的用户因为我正在实现的这个特定功能而陷入永无止境的后退按钮惨败),所以我使用location.replace而不是location.href重定向。但是,我经常在控制台上收到以下错误消息Firefox 12.0

Permission denied to shadow native property

下面是我的代码(在此处添加代码时,我从请求 URL 中屏蔽了我的服务器详细信息)

$(document).ready(function() {

    $(".workout_sel_month").click(function() {
       month_number = $(this).attr('id').replace(/month/g,"");
       weekwise_workout_url = "http://www.example.com/viewrecord/getscheduleformonth";
       location.replace = weekwise_workout_url + "&month_number=" + month_number;
    });

}); 

请注意,如果我location.href改用它,它就像一个魅力。这可能是什么原因?. 如果这是一个重复的帖子(我做了一些基本的搜索并找到了一些帖子,但没有一个特别适合我的情况),我最诚挚的道歉,在这种情况下,请在此处将我与适当的问题联系起来。:)

4

2 回答 2

6

location.replace是一个函数。通过为您尝试覆盖它的属性分配一个值(不允许这样做)。

location.href另一方面,只包含一个您可以更改的字符串。

请参阅MDN 文档


再澄清一点:

location.replace作为函数这一事实并不意味着该属性是不可变的,但它使这样做的决定是可以理解的:
函数应该被调用,它们不应该被覆盖。我认为这就是为什么这个属性相对于其他属性是不可变的。包含字符串、数字等的属性更有可能被更改。

但是任何属性都可以被标记为不可变的,无论它的价值如何。

于 2012-06-21T12:05:09.507 回答
2

我是一个函数而不是一个值。浏览器现在假设的是您希望覆盖一个本机属性,该属性是一个具有您自己的函数的函数。这会引发错误。正确的语法是

location.replace("url");

你的代码需要变成

$(document).ready(function() {

    $(".workout_sel_month").click(function() {
       month_number = $(this).attr('id').replace(/month/g,"");
       weekwise_workout_url = "http://www.example.com/viewrecord/getscheduleformonth";
       location.replace(weekwise_workout_url + "&month_number=" + month_number);
    });

}); 
于 2012-06-21T12:06:24.107 回答