WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:IE5.5とIE5.0でlocation.href

ひよこ [MAIL] [WriteDate : Fri Jun 1 14:21:18 2001]

いつもお世話になってます。
ちょっとはまってしまいました。教えて下さい(^^;

CGI(perl)からHTMLを書き出してその中に
function jumpItem(uri)|
  location.href = uri+pass;
}
としています。passはパスワード文字列です。

そして、リンク元アンカーの記述は

<a href="#" onclick="jumpItem('$adr')">$itemname</a>

で$adrには
"./admin.cgi?action= 〜  &pass="
という形でJavascriptでパスワードを追記する様にしています。

これで、IE5.5では、なんら問題なく動作していますが、IE5.0ではジャンプしてくれません。
アドレス+パラメーターはどちらもちゃんと生成されています。
location.hrefは、self.location.href、parent.main.location.href等関係ありません。

良きアドバイス御願いします。


Nobu3 [URL] [WriteDate : Fri Jun 1 14:36:35 2001]

「&」を「&amp;」で表記する、ややこしいなら「;」でいけるようにする。とか。
passにゴミが入っていないか確認する。とか。

location.hrefがダメなのなら、document.URL(もっとダメかも)。とか。


ひよこ [MAIL] [URL] [WriteDate : Fri Jun 1 14:56:23 2001]

> 「&」を「&amp;」で表記する、ややこしいなら「;」でいけるようにする。とか。

念のためalert()で確認はしていますが、文字化け(?)は起きていません。
っていうか、もし文字化けしたとしても、一度CGIを呼び出せれば良いのですが
そもそも、無反応な状況です。<a href="javascript:void(0)"〜 と同じ感じになってます。

> location.hrefがダメなのなら、document.URL(もっとダメかも)。とか。

document.URLは読み出し(参照)だけでは無いんでしょうか?


ween [WriteDate : Fri Jun 1 15:01:59 2001]

> そもそも、無反応な状況です。
jumpItem() 自体が呼ばれてない、ということですか?
中に alert() を入れみても何も起こらないとか。


Nobu3 [URL] [WriteDate : Fri Jun 1 15:16:30 2001]

IEでは変更可能なんです。<document.URL
まあ普通は使いません。

そもそもpassが曲者だと思うのですが、そのpassはどのように設定されているのでしょうか?
あと、Perlのソースなのか、吐き出されたHTMLのソースなのかを区別してもらった方がわかりやすいです。


ひよこ [MAIL] [URL] [WriteDate : Fri Jun 1 15:52:09 2001]

weenさんwrote
> jumpItem() 自体が呼ばれてない、ということですか?
いえ、ちゃんと呼ばれています。location.hrefが動作していないと言う意味です。
location.hrefの次ぎにalert(uri+pass)でちゃんと表示されます。
ダイアログが表示されているときIE5.5では本体ページは目的ページ表示が表示されますが
IE5.0では何の変化もなく、エラーも出力されません。

Nobu3さんwrote
> IEでは変更可能なんです。<document.URL
そうなんですか?知りませんでした(^^;あとで試してみます。

> そもそもpassが曲者だと思うのですが、そのpassはどのように設定されているのでしょうか?
> あと、Perlのソースなのか、吐き出されたHTMLのソースなのかを区別してもらった方がわかりやすいです。

まず、passは試験段階なので暗号化はまだしていません。
とりあえず、ブラウザからpassの表示をさせない、ソースを見ても見れない、という概念で作ってます。
(もちろんキャッシュでは見れちゃいますが)
処理上どうしてもpostを利用出来なかった(方法が見つからなかった)ので、下記の様な処理をしています。

1:ログイン:CGI表示passの入力
2:pass確認後、CGIからFramesetのHTMLを出力しその中にJSでpassを含ませる。
function getPass(){
 var pass="hoge";
 return pass;
}
その後の処理は全てこの親の関数を呼ぶことでpassを取得
フレームは3分割top,side,main
3メニュー(side)に従いmainフレームにCGIからHTMLを出力し表示。この時点で先のアンカーとJSを同時出力
先般表記はperl内での記述でした。HTMLでは展開されて
<a href="#" onclick="jumpItem('./admin.cgi?〜&pass=')">製品名</a>
と言う感じになります。
4アンカーをクリックした場合CGIを呼び目的のページをHTML出力する。

このとき<a href="〜になぜURLを書かないかは前述passをブラウザで見えなくしたかったため
JSの処理をかませてpassを追記する形をとった。

文字列の最後に改行がないのかな?とも考え、location.href=uri+pass+"\n";
なんてのもやってみましたが、JSからエラーで嫌われました(笑)
そもそもIE5.5で動くのでperlにはあまり関係なさそうな気もしますがどうでしょうか。


Nobu3 [URL] [WriteDate : Fri Jun 1 16:12:45 2001]

topという名前はどうかと。
parentやselfという名前のフレームがあるのと同じ意味で。

alertデバッグは、動作の直前で行う方がいいと思います。

でも、肝心な部分はわかりません。さっぱり。
可能性の問題として、
1.一旦別の変数に代入する。
2.呼び出す時点でpassを追加してしまう。
という対策(?)がないこともないです。
もちろん、
location.href=uri;
が動くのであれば、ですが。


ひよこ [MAIL] [URL] [WriteDate : Fri Jun 1 16:54:24 2001]

> topという名前はどうかと。
やってみましたが、同じでした。

> alertデバッグは、動作の直前で行う方がいいと思います。
これも前後両方で確認していましたが、ちゃんと文字列としては正常でした。

> 1.一旦別の変数に代入する。
これもやってみましたが、かわりません。

> 2.呼び出す時点でpassを追加してしまう。
location.href = uri + pass; のやり方以外でですか?ちょっとわかりづらいです。もう少し詳しく御願いします。

もう一つ書き忘れましたが、sideフレームのスクリプトも似た記述してますが、そちらはちゃんと動くので不可解です。

var path = "http://www.〜/cgi-bin/";
function view(code){
 var param = "?action="+code+"&〜&pass="+pass;
 parent.main.location.href = path+"admin.cgi"+param;
}

アンカー部:
<a href="#" onclick="view('01-01')">なになに</a>

これでちゃんと動きます。ますます????です。
ちなみにURIを絶対アドレスでも確認しましたが同じでした。


ひよこ [MAIL] [WriteDate : Fri Jun 1 16:59:58 2001]

すみません。
とりあえずクライアントの方今からIEのバージョンアップを施しに行きます。
解決にはなってないですが、後で再現できるかどうか公開できるサンプルを作ってみたいと思います。

と言うことで、ちょっと出かけます(^^;


Nobu3 [URL] [WriteDate : Tue Jun 5 11:28:14 2001]

> 2.呼び出す時点でpassを追加してしまう。
↓呼び出す時点。
><a href="#" onclick="jumpItem('$adr')">$itemname</a>
onclick="jumpItem('$adr'+pass)"
な感じ。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]
ChaichanPAPA's World