我被我面临的这个问题困扰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
,它就像一个魅力。这其中可能是什么原因?.如果这是一个重复的帖子(我做了一些基本的搜索并找到了一些帖子,但没有一个特别适合我的情况),我最诚挚的歉意,在这种情况下,请将我与此处的适当问题联系起来。:)
location.replace
是一个 函数。通过为属性赋值,您尝试覆盖它(不允许这样做)。
另一方面,location.href
只包含一个允许您更改的字符串。
请参阅 MDN 文档。
澄清一下:
仅location.replace
是一个函数这一事实并不意味着此属性是不可变的,但它使这样做的决定变得可以理解:
函数应该被调用,它们不应该被覆盖。我认为这就是为什么这个属性与其他属性相比是不可变的。包含字符串、数字等的属性更有可能被更改。
但是任何属性都可以标记为不可变,无论其值如何。
我不是一个函数而不是一个值。浏览器现在假设的是您希望使用自己的函数覆盖本机属性,该属性是一个函数。这会引发错误。正确的语法是
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);
});
});