- PR -

[ASP.NET2.0]別ウィンドウの変数の参照の仕方

投稿者投稿内容
うこたん
会議室デビュー日: 2006/07/13
投稿数: 1
投稿日時: 2006-07-13 16:21
お初にお目にかかります。
Visual Web Developer 2005 Express Editonを使いまして
Webを作成しているものですが、ウィンドウ間の値のやり取りの
仕方がわからなく質問をさせて頂きました。

例)
ウィンドウ1.html
-----------------
<script type="text/javascript">
<!--
var a
function b(){
----------
}
//-->
</script>

とJavascriptで変数や関数を定義しまして、ウィンドウ2.htmlでボタンを押したときなどに、このウィンドウ1.htmlの変数aに任意の値を入れたり、関数を呼び出すには
どうしたらいいのでしょうか??

ご教授お願い致します。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-07-13 20:50
 その変数を、どのように表示したウインドウの、どこ(サーバ|クライアント)で知りたいですか?

 具体例は・・・パターンが多いから、パターンが示された後で(誰かが答えてくれるでしょうぉぃ)
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2006-07-13 22:18
引用:

ウィンドウ2.htmlでボタンを押したときなどに


なので、クライアントだと思いますが...
ASP.NET 2.0って書いてるし、うーん??

とりあえず、クライアント(Javascript)だと仮定して回答します。
呼び出し元は"opener"で指定します。
例にある変数であれば opener.a でアクセスできますし、関数であればopener.b(); で呼び出せます。

ウィンドウ2側がフレーム分けされている場合は、"top."を先頭に付けてください。

[以下追記]
ああ、阿呆だ俺。
ウィンドウ1からウィンドウ2を開くとか全く書いて無いじゃんか。脳内補完しすぎだ。
えーと、Javascriptで呼び出す場合は、対象のwindowオブジェクトを取得する必要があります。
以下パターン例です。


  • ウィンドウ1からウィンドウ2を開いた場合は、上記の通り"opener"がウィンドウ1のオブジェクトになります。
  • 逆にウィンドウ2からウィンドウ1を開いた場合は、window.open関数の戻り値がウィンドウ1のオブジェクトになります。
    <例>
    obj = window.open("[ウィンドウ1のURL]","_top");
    obj.a = "hoge";
    obj.b();
  • 両者に開く、開かれるの関係がない場合、ウィンドウ2から一旦ウィンドウ1をopenしてあげる必要があります。
    但しこの場合ウィンドウ1は予め固定ウィンドウ名で開かれていなければ取得はできません。
    <例>
    obj = window.open("","[ウィンドウ1を開いた時のウィンドウ名]");
    obj.a = "hoge";
    obj.b();



[ メッセージ編集済み 編集者: でっち6号 編集日時 2006-07-14 03:55 ]
うこたん
常連さん
会議室デビュー日: 2006/07/14
投稿数: 34
投稿日時: 2006-07-14 11:04
>両氏
本格的な開発は初めてなもので、サーバー、クライアントの知識が低くてですみません。
HTML、JavaScript、ASP.NETのコントロール、VBが出てきてごっちゃになっていてさっぱりの状況でした。仮のソースで少々質問させてください。

仮のソース Defalut.aspx
<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>無題のページ</title>
<script language=javascript>

</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />&nbsp;</div>
</form>
</body>
</html>

先ほどでっち6号さんが教えてくれたことは
<head runat="server">
<title>無題のページ</title>
<script language=javascript>

</script>
</head>
この間(JavaScript)に書くことですよね?

デザインでボタンをダブルクリックするとボタンのクリックイベント
<script runat="server">

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

End Sub
</script>
これが出来上がると思いますが、これはVBですよね?
それではここで書いた変数の値を別ウィンドウに渡したい場合はどうすればいいのでしょうか??
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-07-14 11:33
引用:

うこたんさんの書き込み (2006-07-14 11:04) より:

それではここで書いた変数の値を別ウィンドウに渡したい場合はどうすればいいのでしょうか??


サーバ側から別フレームのウインドウを直接参照することは出来ないので
JavaScriptでやることになると思います。

でっち6号さんの案のように
他のフレームのデータを書き換えるか、フレームそのものを再ロードさせる
ような JavaScript のコードを RegisterStartupScript なんかを使って吐き出させてあげれば出来そうですね
うこたん
常連さん
会議室デビュー日: 2006/07/14
投稿数: 34
投稿日時: 2006-07-14 18:35
引用:

でっち6号さんの案のように
他のフレームのデータを書き換えるか、フレームそのものを再ロードさせる
ような JavaScript のコードを RegisterStartupScript なんかを使って吐き出させてあげれば出来そうですね



すみません、実際にどうやってコーディングをすればいいのかわかりません。
VBの値をテキストなどに入れといて、それをscriptから参照するというイメージでしょうか?
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-07-15 01:26
引用:
それではここで書いた変数の値を別ウィンドウに渡したい場合はどうすればいいのでしょうか??

RegisterStartupScriptはクライアントで最初に実行したいscriptそのものを登録します。

たとえば、こういうことでしょうか。

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
 Dim test As String = "VBで書いた変数"
 ClientScript.RegisterStartupScript(GetType(String), "start1", "<script language=""javascript"">window.opener.a='" & test & "';</script>")
End Sub

引用:
VBの値をテキストなどに入れといて、それをscriptから参照するというイメージでしょうか?

実現したいことによってはこういう方法も有効ですね。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-07-15 23:29
 ウェブ アプリケーションでは、「サーバ」と「クライアント」に、それぞれプログラム コードがあります。
 普通、サーバとクライアントで、お互いの変数の内容を知ることはできません。

 これをするためには、サーバからは「デフォルト値」として埋め込んだり、スクリプトを動的に生成して埋め込んだりします。

 クライアントからは、ポストバックしたり、リクエスト パラメータとして通知します。

 複数のウインドウ間で値をやりとりする場合、サーバ側では普通、セッションを使います。Java では他の画面へポストすること(ポスト フォワード)ができますが、ASP.NET 1.x ではそれができません。ASP.NET 2.0 からは可能になっています。
 ASP.NET 1.x では、他の画面にポストできないので、いったんセッション オブジェクトに格納してから Redirect するか、Transfer で遷移して参照します。

 VWD は、サーバとクライアントのコードを別にできたと思います。
ですので、<script runat="server"> は使わないようにする方が、サーバ側のコードなのか、クライアント側のコードなのか、はっきりさせやすいと思います。


 まず、サーバのコード、クライアントのコードを意識してください。2つのウインドウの関係と、それぞれのウインドウの C/S どちらで定義した変数の内容を、反対側の C/S どちらのコードで参照したいのか、はっきりさせてください。
 2006-07-13 16:21 の投稿では、クライアント側で参照したいということのようでしたが、2006-07-14 11:04 ではサーバ側で参照したいと言っているように思えます。

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