2016-09-09 10 views
1

私はちょうどlocation.hrefまたはlocation.hashようwindow.locationオブジェクトのいくつかのプロパティにパッチを適用する必要があります。それが可能かどうかはわかりません。私はすでにいくつかの方法を試していますが、何もできませんlocation.hrefのようなLocationオブジェクトの既存のプロパティを変更することはできますか?

たとえば、JavaScriptコードがlocation.hrefプロパティの値を変更しようとすると、このサルパッチプロパティはhistory.pushState関数を代わりに呼び出す必要があります。ロジックは次のコードのようになります。

var customLocation = { 
    set href(url){ 
     history.pushState(null, '', url); 
    }, 
    set hash(url){ 
     history.pushState(null, '', url); 
    } 
}; 

現在、私のWebブラウザのようなページにホストされている100同じドメインのアプリケーションがあります。自分のコードですべてのアプリケーションのナビゲーションを処理しようとしています。 Webブラウザはそれについて知るべきではありません。私は既にパッチhistory.pushStatehistory.replaceStateをパッチしています。それは完璧に動作します。 enter image description here

PS。あらゆるコンテキスト(iframe)のほとんどのナビゲーションでは、ブラウザは常に、トップのブラウズコンテキストに新しい履歴エントリを作成します。これにより、ユーザーは戻るボタンを使用して以前の状態にナビゲートできます。これらのプロパティは、ブラウザ自体によって管理されているので、それは通常のブラウザで行うことができない研究の後、私はかなり自信を持っていることを

+0

あなたはより具体的なことはできますか? 「いくつかのプロパティを修正する」とはどういう意味ですか? – mherzig

+0

@mherzig私はちょうど私の質問を更新します。 –

+0

Hmm。 'href'と' hash'はブラウザで処理されるので、設定されると実際のページ位置が変更されます。つまり、ページの位置を関数に設定しようとします。どちらが効果があっても、新しい「ページ」であり、おそらく上書きをリセットします。たぶん誰か他の人が考えているだろうが、私はこれらを完全に無効にすることはできないと思う。 – mherzig

答えて

0

唯一の解決策は、これらのネイティブAPIをパッチ適用することができ、アプリケーションコンテナの外部で実行するときに正しく動作するため、子アプリケーションにhistory.pushStatehistory.replaceStateを強制的に使用させることです。その結果、すべての子アプリケーションの履歴状態を完全に管理できます。

関連する問題