• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:スクロール位置に関してです)

スクロール位置に関する質問

このQ&Aのポイント
  • PHP4で作成されたウェブページで、親ウィンドウのスクロール位置に関する問題が発生しています。
  • 子ウィンドウを閉じるときに親ウィンドウをリロードする処理を行っていますが、その際に親ウィンドウのスクロール位置がトップに戻ってしまうという現象が起きています。
  • リロード処理はJavaScriptを使用しており、F5キーの更新処理ではスクロール位置が正しく更新されるため、JavaScriptからの指定でもうまくいくのではないかと考えています。

質問者が選んだベストアンサー

  • ベストアンサー
  • auty
  • ベストアンサー率58% (284/486)
回答No.2

>>> 親Window内のデータが多くリロードに時間がかかっている のが原因かも知れませんが… なるほど私の場合、親ウィンドウは、887バイトでしか確認していませんでました。 そこで、次の方針でサンプルを作ってみました。 ・ IEのみに以下の対処をする。判断には、「document.attachEventが使えるかどうか」を利用する。 ・ 親ウィンドウを一旦閉じ、新たなウィンドウを開く。 ・ そのとき、y=スクロール位置(scrollTop) をクエリ情報として加える。   URL?line=y 以上を実際に適用する場合他の他の利用条件とトラブルになることも考えられますので何かありましたらお知らせください。 以下のコードを参考にしてみてください。 windowcontrol4_2.html ------------------------------------------------------------ <html> <title>window control3</title> <script type="text/javascript"> <!-- var win2 = false; function init() { var arr=Array(); var querys=location.search; if(querys) { var q = querys.replace(/^\?/,'').split('&'); for(i=0 ; i<q.length ; i++){ var pair=q[i].split('='); arr[pair[0]]=pair[1]; } window.scrollTo(0,Number(arr['line'])); } } function openWin() { win2=window.open('controlwin4_2.html', 'newwin', 'toolbar=no, location=no, status=no, menubar=no, scrollbars=no, width=180, height=250'); } function closeWin() { if( win2 && !win2.closed ) { win2.close(); } else { alert("すでにウィンドウは閉じられています"); } } //--> </script> <body onload="init()"> <h3>親ウィンドウのコントロール</h3> <hr /> <form> <input type="button" value="New Window" onclick="openWin()" /> <input type="button" value="Close ChildWindow" onclick="closeWin()" /> <br /> A <br /> A <br /> A <br /> A <br /> A <br /> A <br /> A <br /> A X <br /> X <br /> X <br /> X <br /> X <br /> X <br /> X <br /> X <br /> X <br /> X <br /> X <br /> X <br /> X <br /> X </form> </body> </html> ------------------------------------------------------------ controlwin4_2.html ------------------------------------------------------------ <html> <title>Window Control</title> <script type="text/javascript"> <!-- function reloadWin() { if(!opener.closed) { if(document.attachEvent) { var y= window.opener.document.body.scrollTop; window.opener.close(); window.open('windowcontrol4_2.html?line=' + y, 'windowcontrol4_2', ''); } else { window.opener.location.reload(); } window.close(); } } //--> </script> <body> 新しいウィンドウから親のウィンドウを操作 <hr /> <form> <input type="button" value="Window reload" onclick="reloadWin()" /> </form> </body> </html>

niko06
質問者

お礼

お世話になります お礼遅れまして申し訳無いです 教えて頂いた内容からヒントを得まして出来ました! 力技ですが… ////////////////////////////////////////////////////////////////////// ---------------------------------------------- 子ウィンドウ(終了処理部) ---------------------------------------------- <script type='text/javascript'>  var y= window.opener.document.body.scrollTop;  lmt = new Date();  lmt.setTime(lmt.getTime() + (1000 * 60 * 3));  lmt2 = lmt.toGMTString();  document.cookie = "SCROLLTOP="+y+"; expires="+lmt2;  window.opener.location.reload();  window.close(); </script> ---------------------------------------------- 親ウィンドウ ---------------------------------------------- <html> <head> <meta http-equiv="content-script-type" ontent="text/javascript"> <script type="text/javascript"> <!-- function scrollWin() {   val=GetCookieData("SCROLLTOP");   if(val!=""){window.scrollTo(0,val);} } function GetCookieData(kyword) { if(typeof(kyword) == "undefined") // キーワードなし return ""; // 何もしないで戻る kyword = kyword + "="; kydata = ""; scookie = document.cookie + ";"; // クッキー情報を読み込む start = scookie.indexOf(kyword); // キーワードを検索 if (start != -1){ end = scookie.indexOf(";", start); // 情報の末尾位置を検索 kydata = unescape(scookie.substring(start + kyword.length, end)); } return kydata; } //--> </script> </head> <body background="img/back.jpg" onLoad="scrollWin()">  :  : </body> </html> ////////////////////////////////////////////////////////////////////// 3分を期限としてクッキーに情報をためこみ 親Load後にスクロールするようになっています ありがとうございました。大変助かりました。

その他の回答 (1)

  • auty
  • ベストアンサー率58% (284/486)
回答No.1

>>> 親Windowのリロード処理を行っています そこで、親Windowのスクロール位置がTopに戻ってしまう現象が起きてしまい 困っています この現象は、IEのときに起こるようですが、 スクロール位置(scrollTop)を記憶しておき、リロード後そこに戻ればいいと思います。 以下のコードを参考にしてみてください。(y方向のみの場合) ------------------------------------------------------------ var y= window.opener.document.body.scrollTop; window.opener.location.reload(); window.opener.scrollTo(0,y);

niko06
質問者

お礼

お世話になります 回答有難う御座います 教えて頂いた処理を組み込んで試してみた所 やはりTopに戻ってしまうようです 記述は // Windowを閉じる echo "<script type='text/javascript'>"; echo "var y= window.opener.document.body.scrollTop;"; echo "window.opener.location.reload();"; echo "window.opener.scrollTo(0,y);"; echo "window.close();"; echo "</script>"; と子Windowの終了処理を変更してみました 親Window内のデータが多くリロードに時間がかかっている のが原因かも知れませんが…

関連するQ&A

専門家に質問してみよう