jQuery プラグイン LocalScroll への参照は正しい方向に進んでいます。実際、適切に実装できれば、問題は解決すると思います。
このプラグイン、jQuery Mobile、およびその他の場所で使用されるアンカーベースのナビゲーションは、window.location
オブジェクトを更新し、ブラウザーのアドレス バーにも反映されるため、明示的なページの更新が発生したときに、ハッシュされた場所が保持されます。
答えは、このローカル リンクをアドレスから解析できるスクリプトを作成することです。これを示す一般的な JavaScript コード ブロックを次に示します。
window.onload=function() {
var URLParts=window.location.toString().split('#');
if(URLParts.length>1)
var lastPage=decodeURI(URLParts[1]);
else
return false;
if(lastPage)
iframe_load(lastPage,'content');
}
function clear_last_page(location) {
var URLParts=location.split('#');
if(URLParts.length<=1)
return location;
URLParts.pop();
return URLParts.join('#');
}
function iframe_load(url,targetID) {
document.getElementById(targetID).src=url;
var location=clear_last_page(window.location.toString())+'#'+url;
window.location.href=location;
}
使い方
イベントがトリガーされるwindow onLoad
と、URL でアンカー (ハッシュ) リンクが検索されます。見つかった場合は、これがページへの参照であると想定し、 に渡しますiframe_load()
。
この関数は 2 つのことを行います。まず、ターゲットのインライン フレームをパラメーター経由で渡されたページにポイントしurl
ます。次に、親フレームを架空のアンカーにポイントします。これは、ページが更新された後も保持されます。
したがって、親フレームを更新すると、そのアンカー テキストが取得、解析され、最後に読み込まれたインライン ページを再読み込みするために使用されます。
この関数clear_last_page()
は、追加のアンカー リンクが URL に追加されるのを防ぐ単なるヘルパー関数です。
デモンストレーション
次の URL にアクセスしてください。
http://gocontactform.com/stackoverflow/dynamically-change-iframes-content/
リンク「ページ 2」をクリックして、変更を確認します。次に、ページを更新します。
注目に値する
このソリューションは、技術的にはアンカーの通常の機能を引き継ぐことに注意してください。そのため、ページ上で通常どおりアンカー リンクを使用しようとすると、望ましくない結果が生じる可能性があります。
質問でモデル化したもの(属性iframe_load()
を使用した従来のリンク)ではなく、そのインラインフレームにバインドされたリンクに依存することを余儀なくされています。target
src
デフォルト属性をインラインで定義しないこともお勧めします。むしろ、onLoad
ハンドラーに への呼び出しを追加することができiframe_load('page1.html','content')
ます。これにより、アドレス内のアンカー リンクで更新するときに、デフォルト ページをロードする不必要な試みを防ぐことができます。
あなたが求めていることを達成する他の方法もあります。しかし、このソリューションは理解しやすく、実装しやすいと思います。
それが役立つことを願っています!