フレーム分割したウィンドウオープン時の特定フレームのリンク先

[新着] Webテンプレートを仮オープンしました



0   名前: ばるさ : 2007/03/16(金) 14:58  ID:KJGlEcI7 sub-lq
宜しくお願いします。

フレーム分割しているページを、JavaScriptで新規ウィンドウで開き、
その片方のフレームのURLを動的に変えたいと考えています。

フレーム分割したウィンドウを開くまではOKなんですが、以下のaの部分で
エラーが発生し、原因がわからず困っています。

更になぜか、ifの分岐でelseの方を通る時、即ち既にフレーム分割した
ウィンドウが存在している時は、エラーが発生せず目的のページが
左側フレームに表示されます。

エラーメッセージは
'winCHK.data1.location'は、Null または オブジェクトではありません。
という内容なので、おそらくはdata1のフレームがうまく参照できて
いないのかと思うのですが…

◆JavaScript
var winCHK;
function test(elm) {
    strURL = "./test/test_frame.html";
    if (!winCHK || winCHK.closed) {
        strWinName = "winCHK";
        winCHK = window.open(strURL, strWinName);
    } else {
        winCHK.location.href = strURL;
        winCHK.focus();
    }
    winCHK.data1.location.href = "./test.asp?row=" + elm.id; //<--a
}


◆test_frame.html のhtml
<HTML>
<HEAD>
<META http-equiv=Content-Type content="text/html; charset=SHIFT_JIS">
<TITLE>■テストページ</TITLE>
</HEAD>

<FRAMESET COLS="700,*" BORDER="0">
	<FRAME SRC="chk_default.html" name="data1" noresize>
	<FRAME SRC="chk_default.html" name="data2" noresize>
</FRAMESET>

</HTML>


自分なりに色々調べてはみたのですが、調べ方が悪いのか
参考になる様なページにたどり着けません。
ブラウザはIE6です。宜しくお願いします。m(__)m

1   名前: 匿名 : 2007/03/16(金) 14:58  ID:Z/T9lFdK sub-kJ
こういう場合のコードの提示の仕方なんだけど、できれば抜粋ではなく、エラーを検証できるテストケースを作ってほしい(テストケースを作っている最中に解決した、なんてのもよくある話だ)。

とりあえず、>>0 を元にいろいろ弄ってみたが、エラーを再現することはできなかった。IE6 で正常に動作する。

2   名前: ばるさ : 2007/03/16(金) 14:58  ID:KJGlEcI7 sub-lq
匿名様

レスおよび、検証頂きありがとうございます。
※返事が遅くなりすいません。

>こういう場合のコードの提示の仕方なんだけど、

質問させて頂くにあたり、ソースの内容を若干変更したりしている部分はありますが、
処理そのものに関係する部分には手を加えず提示していますので、そういう意味では
提示のソースでほぼ全文なんですが…

エラーを再現させるには当処理とは関係のないJavaScriptであったり、aspやhtmlソース等も
提示しないと駄目でしょうか?となると、申し訳ないのですが、全て提示するのは難しいです。

匿名様の環境だと正常に動作するとの事ですので、こちらの環境に原因がありそうですね…
こちらでももう少し色々トライしてみます。

3   名前: モノ ◆7YMtX/NYmu : 2007/03/16(金) 14:58  ID:TeHw2026 sub-Cl
>>1(ID:Z/T9lFdK)さんの言いたいことの肝要な部分は

> エラーを検証できるテストケースを作ってほしい

ということなんじゃないでしょうか。
だから、


> エラーを再現させるには
ではなく、
「エラーを再現できる(最低限の)ソースを提示してください」
ということになります。

ばるささんの環境では、>>0のソースでエラーが再現されるなら、
環境のことも考慮にいれる必要があるかもしれません。

4   名前: ばるさ : 2007/03/16(金) 14:58  ID:KJGlEcI7 sub-lq
モノ様

お返事ありがとうございます。
確かにscriptを呼び出す側のhtmlソースの提示等をしてませんでした。
申し訳ございませんでした。とりあえず現象再現に必要と思われます
一通りのソースを提示します。
※一部、ソースに修正は入れています。また、cssについても割愛しています。


◆script呼び出し側html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<link rel="stylesheet" href="../css/admin.css" type="text/css">
<script language="javascript" src="../js/common.js"></script>
                                      <!--↑にfunction testを格納-->
<title>test</title>
<head>
<body class="win2">
<h1>test</h1>
<form name="READ_WK">

  <div class="ttl0">■データ選択</div>
  <div class="ind">
    <div><input type="button" style="width:150px;" value="全件削除" onclick="test0();"></div>
    <br />
    <table id="else">
      <tr>
        <td class="ttl" nowrap style="width:30px;">ID</td>
        <td class="ttl" nowrap>確認</td>
        <td class="ttl" nowrap>修正</td>
        <td class="ttl" nowrap>登録</td>
        <td class="ttl" nowrap>更新</td>
        <td class="ttl" nowrap>削除</td>
      </tr>
      <tr>
        <td style="vertical-align:top;">1</td>
        <td style="vertical-align:top;">
          <input type="button" id="1" value="確認" style="width:40px;" onclick="test(this);">
        </td>
        <td style="vertical-align:top;">
          <input type="button" id="1" value="修正" style="width:40px;" onclick="test2(this, '');">
        </td>
        <td style="vertical-align:top;">
          <input type="button" id="1" value="登録" style="width:40px;" onclick="test3(this);" disabled>
        </td>
        <td style="vertical-align:top;">
          <input type="button" id="1" value="更新" style="width:40px;" onclick="test4('20');">
        </td>
        <td style="vertical-align:top;">
          <input type="button" id="1" value="削除" style="width:40px;" onclick="test0(this);">
        </td>
      </tr>
    </table>
  </div>
</form>
</body>
</html>


◆新規ウィンドウの両フレームの初期htmlソース
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
	<link rel="stylesheet" href="./css/admin.css" type="text/css">
	<script language="javascript" src="./js/common.js"></script>
	<title>test</title>
</head>
<body class="win2">
	<div>test</div>
</body>
</html>


◆test.asp
    Response.Write Request.QueryString("rowid")


最初に提示させてもらった Java Script と、今回のソースで
検証は可能かと思われますが、いかがでしょうか?
なお、「確認」ボタンクリックでCallされるfunctionが今回質問させて
もらっている件です。

稚拙なソースで恥ずかしいですが、宜しくお願いします。

5   名前: 匿名 : 2007/03/16(金) 14:58  ID:Z/T9lFdK sub-kJ
私の環境(WinXPsp2+IE6.0)ではエラーを確認できない。

で、テストケースというのは要するに、原因の所在を特定するためのものなんだ。だから、

・無関係な要素(div、table、link)・属性(class、nowrap)・スタイル指定は可能な限り削る。
・クライアント側の問題なのだから、ASP も(おそらく)無関係。
・状況を確認しやすいように。フレーム枠が非表示では確認しづらい。
・余計なエラーを増やさないように。id が数字で始まったり同一ページ内に同じ id 値が現れることはありえない。

逆に聞くけど、以下のテストコードでエラーが発生する?

main.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<title>MAIN</title>
<script type="text/javascript">

var FRAMESET_WIN;
var FRAMESET_WIN_NAME = 'WIN_CHECK';

function test (uri1, uri2) {
    if (! FRAMESET_WIN || FRAMESET_WIN.closed) {
        FRAMESET_WIN = open (uri1, FRAMESET_WIN_NAME);
    } else {
        FRAMESET_WIN.location.href = uri1;
    }
    FRAMESET_WIN.focus ();
    FRAMESET_WIN.frames['data1'].location.href = uri2;
    return false;
}

</script>
<p><a href="frameset.html" onclick="return test (this, 'frame3.html');">DATA 3</a></p>
<p><a href="frameset.html" onclick="return test (this, 'frame4.html');">DATA 4</a></p>

frameset.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<title>FRAMESET</title>
<frameset cols="300, *">
  <frame src="frame1.html" name="data1">
  <frame src="frame2.html" name="data2">
</frameset>

frame1.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"><title>DATA 1</title><h1>DATA 1</h1>

frame2.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"><title>DATA 2</title><h1>DATA 2</h1>

frame3.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"><title>DATA 3</title><h1>DATA 3</h1>

frame4.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"><title>DATA 4</title><h1>DATA 4</h1>

これでエラーが出るのであれば、環境依存の問題の可能性大。エラーが出ないなら、エラーが出るように付け足してくれ。

あと念のため確認しておくが、リソースは全て同一ドメイン上にあるんだよね?

6   名前: ばるさ : 2007/03/16(金) 14:58  ID:1yKTHirW sub-lq
匿名様

お返事遅くなり申し訳ありません、また、たびたびありがとうございます。

申し訳ないのですが、当方、別件で急ぎの作業が入りまして、しばらくレスが出来ないと思われますが
時間とれしだい匿名様の提示して頂いたソースで検証させて頂きます。
※別件の方は、なんとか今日中にケリをつけたいと考えています。

7   名前: ばるさ : 2007/03/16(金) 14:58  ID:KJGlEcI7 sub-lq
匿名様

お返事遅くなりました。申し訳ございません。

匿名様の方で提示して頂いたソースを実行してみたところ、当方のPCでは
やはりエラーが出ました。

>これでエラーが出るのであれば、環境依存の問題の可能性大。

という事でしたので、別のPCで確認したところ、そちらでは
エラーも発生せず、問題無く動作しました。
また、件のページについても期待通りの動作を行っていました。
(最初にまず、別のPCで確認しておくべきでした。)

ひとまずIEの再インストールを実施したのですが、するとエラーが
発生しなくなりました。
原因については判然としないのですが、ひとまずこれでクローズと
させて頂きます。

お騒がせして申し訳ございませんでした。m(__)m

一覧へ戻る