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 に答える