- PR -

【ASP.NET】【JavaScript】定時間毎にWebページを自動リフレッシュ & 現在のスクロール位置を保持

1
投票結果総投票数:17
Windows 1 5.88%
ASP.NET 7 41.18%
JavaScript 9 52.94%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
T.S
会議室デビュー日: 2006/08/21
投稿数: 2
お住まい・勤務地: 東京都
投稿日時: 2006-08-21 19:26
初めて投稿させて頂きますfine_courtと申します。

当方の環境は以下の通りです。
OS  :Windows XP
ブラウザ:IE6
開発環境:Microsoft ASP.NET (C#)

現在、JavaScriptを用いて、
「一定時間毎にWebページを自動リフレッシュさせて かつ 現在見ているスクロール位置を保持する。」
ということを実現したいのです。
試行錯誤した結果、下記のコードで実現できました。
(そのままコピーして頂いて動作すると思います。自動リフレッシュ感覚は5秒としています)

しかしながら、
window.nameに現在見ているページのスクロール位置(x,y)を持たせる、という方法で実現させていますが、
とある事情でwindow.nameは使えなくなりました。
そこで、現在のスクロール位置(x,y)をwindow.name以外に持たせる必要があります。

例えば、
<INPUT id="PositionHold" name="PositionHold">
という入力ボックスをWebページに持たせます。(場合によっては この入力ボックスをHidden属性にします)
次に、
window.self.PositionHold.Value = (x,y);
そこに現在のスクロール位置を持たせるという方法も考えましたが、JavaScriptのエラーが出てしまいます。

window.nameに現在のスクロール位置を持たせるという方法を使用せずに、
「一定時間毎にWebページを自動リフレッシュさせて かつ 現在見ているスクロール位置を保持する。」
という機能を実現したいのですが、みなさんのお知恵をお借りできないでしょうか?
よろしくお願いします。

<HTML>
<HEAD>
<title>JavaScrit テスト</title>
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<SCRIPT language="javascript">
function ReLoad()
{
// 現在の表示スクロール位置を取得
var xOffset = window.document.body.scrollLeft;
var yOffset = window.document.body.scrollTop;
// 現在の表示スクロール位置を代入
window.name = xOffset + "," + yOffset;
//window.self.document.PositionHold.Value = xOffset + "," + yOffset;
// リロード
window.location.reload(true);
}
function Scroll()
{
// 表示位置(x, y)を取得
var coordinates = window.name.split(",");
var x = coordinates[0];
var y = coordinates[1];
// 表示スクロール位置座標を削除
window.name = "";
// 表示していた位置までスクロール
window.scrollTo(x, y);
}
function ShowInformationOnStatusBar()
{
var today;
var yy, mm, dd, h, m, s;
var clock;
today = new Date();
yy= today.getYear();
mm= today.getMonth() + 1;
dd= today.getDate();
h = today.getHours();
m = today.getMinutes();
s = today.getSeconds();
if (h < 10)
{
h = "0" + h;
}
if (m < 10)
{
m = "0" + m;
}
if (s < 10)
{
s = "0" + s;
}
clock = "更新時刻 : " + yy + "/" + mm + "/" + dd + " " + h + ":" + m + ":" + s;
window.status = clock;
}
if (window.name != "")
{
// IE の ステータスバーに情報を表示
ShowInformationOnStatusBar();
// スクロール関数を呼ぶ
onload = Scroll;
// 自動更新用タイマを設定
window.setTimeout("ReLoad();", 5000);
}
else
{
// 起動時の処理
window.name = "0,0";
// 自動更新用タイマを設定
window.setTimeout("ReLoad();", 100);
}
</SCRIPT>
</HEAD>
<body>
<INPUT id="PositionHold" name="PositionHold"><BR>
・1<BR>・2<BR>・3<BR>・4<BR>・5<BR>・6<BR>・7<BR>・8<BR>・9<BR>・10<BR>
・11<BR>・12<BR>・13<BR>・14<BR>・15<BR>・16<BR>・17<BR>・18<BR>・19<BR>・20<BR>
・21<BR>・22<BR>・23<BR>・24<BR>・25<BR>・26<BR>・27<BR>・28<BR>・29<BR>・30<BR>
・31<BR>・32<BR>・33<BR>・34<BR>・35<BR>・36<BR>・37<BR>・38<BR>・39<BR>・40<BR>
・41<BR>・42<BR>・43<BR>・44<BR>・45<BR>・46<BR>・47<BR>・48<BR>・49<BR>・50<BR>
</body>
</HTML>
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2006-08-21 20:59
window.nameの代わりに、location.hashに変更しても動作しましたよ。
いかがでしょうか?。
1

スキルアップ/キャリアアップ(JOB@IT)