リロードすると、スクリプトが実行されない?

[上に] [前に] [次に]
Nobu3 [E-Mail] [HomePage] 1999/09/30(木) 09:19:07
http://w2452.nsk.ne.jp/~nobutaka/index.html
このページなんですけど、フィルタを外部ファイルから操作してるんですが、リロードしたときなどにスクリプトが実行されないようなんです。
原因に心当たりの有る方はいらっしゃいませんか?

その挙動を確認しているのは、Windows95+IE4SP2です。
また、上記ページは以下のファイルを読みこんでいます。
http://w2452.nsk.ne.jp/~nobutaka/myjs.js
http://w2452.nsk.ne.jp/~nobutaka/mycss.css
http://w2452.nsk.ne.jp/~nobutaka/ie4.js
http://w2452.nsk.ne.jp/~nobutaka/ie4.css

1999/09/30(木) 10:16:02
index.htmとindex.htmlの両方あるからとかは関係ないのでしょうね。

Nobu3 [E-Mail] [HomePage] 1999/09/30(木) 14:22:46
えっと、たぶん関係ないとは思うんですけど・・・。あるんでしょうか?心配です・・・。

あと、実行部分にalert()をしかけておくと、スクリプト自体は実行しているみたいなのですが、if文でうまく分岐されないようで、分岐内へは来ていないみたいです。

if(ft[i].filters.revealTrans)

このif文に引っかかってくれません。
これをコメントにすると、「filters.revealTransはオブジェクトではありません。」と言われます。
参照しているのは、同じタグなんですけど・・・。
初期状態で「visibility:hidden;」にしているので、実行されないと文字が見えないままです・・・。
スタイルシートも解釈しているのに、フィルタだけ無視するようなことってあるのでしょうか??
もちろんIE4以降とか限定ですけど・・・。

Nobu3 [E-Mail] [HomePage] 1999/09/30(木) 14:29:55
ちなみに、「file://」の状態で実行すると、予定どおり実行されます・・・。はぅ〜。

TAKI 1999/09/30(木) 20:51:26
>リロードしたときなどにスクリプトが実行されない
「など」とおっしゃってるあたり
ご自分でも色々試されたとは思うのですが
うちの環境(Win95+IE4SP1)では
上記のリンクを新しいウィンドウで開いた時にも
スクリプトが実行されてないようで、
リロードしなくても何も表示されません。

if(ft[i].filters.revealTrans)の前に、

if(ft[i].filters){
obj = ft[i].filters;
testStr='';
for(j in obj){ testStr += j + ';' + obj[j] + '\n';}
alert(testStr)
}

と入れてローカルのサーバーからhttp://〜として見てみたところ
lemgth:0
とだけ出ました。
表示できる時は
lemgth:1
revealTrans;
と出るので、なんとなく、無視されてるような気がする…。

TAKI 1999/09/30(木) 20:54:40
>lemgth:0
>lemgth:1
それぞれlength:0、length:1 のまちがいです。(^^;

Nobu3 [E-Mail] [HomePage] 1999/09/30(木) 23:30:25
http://w2452.nsk.ne.jp/~nobutaka/test/index.html
あやしそうな部分を直してみて、場所をかえて再アップしました。
カウンタを隠してあったのですが、localhostで試したときは変化無かったので削除してあります。
リンク先は存在していません。ごめんなさい。
また、変更したjsやcssは上に書いたものをコピーしただけです。

TAKIさん。ありがとうございます。
クラス名の取得までは上手くいってるんですけど、なぜフィルタが無視されるんでしょうね・・・?
仕様(っていうかバグ?)なんでしょうか・・・。

「など」というのは、URLを直打ちしたときも、同じように動かない「事もある」ので、自分でもよくわかってないからです。

ちなみに、Win98+IE5
userAgent : Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)
appMinorVersion : ;q231452;q231450;3717;
ヘルプで見れるバージョン : 5.00.2314.1003
では、何度リロードしてもうまくいくのです・・・。
これも仕様なのでしょうか・・・。

TAKI 1999/10/01(金) 00:34:18
>同じように動かない「事もある」
この法則がいまいち不明なんですよね…。
IEのスタートページに設定した場合や
ブックマークで飛んだ時にも
この現象が起こるようです。
(でももう一回ブックマークで飛ぶと表示される:謎)

if(ft.filters.revealTrans){
……
} else {
location.replace(document.URL);
}

とすれば、とりあえずWin95+IE4SP1での
対症療法にはなるみたいです。
でも根本的な解決策になってない…

Nobu3 [E-Mail] [HomePage] 1999/10/01(金) 00:43:25
う〜ん。そうなんですか・・・。ますます謎です・・・。

で、「replace()」とか「reload()」とかは、あまり使いたくないです。
贅沢いってる場合でもないですが、本番ではプロバイダの用意しているカウンタをつけたいので・・・。(性能よくないので、リロードすると増えるのです。ちなみに今日は・・・うわ!)
それに、もし、認識されないと、ずっとリロードしそう(っていうか、そっちの方が可能性高そう)なので・・・。

あきらめた方がいいのかも(弱気)

TAKI 1999/10/01(金) 01:21:57
>(でももう一回ブックマークで飛ぶと表示される:謎)
どうもそのウィンドウ内での一回目のURLだと失敗するみたいです。
↑history.length = 0ということではなくて
そのウィンドウでの履歴に問題のURLが一度も出てきてない場合

>それに、もし、認識されないと、ずっとリロードしそう
reload()は無限リロードかましてくれましたけど、
replace() と location.href = document.URL は大丈夫でした。
でも、カウンタの問題はありますね…。

ちなみにうちは
userAgent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)
appMinorVersion: ;SP1;
Virsion:4.72.3110.8
です。

Nobu3 [E-Mail] [HomePage] 1999/10/01(金) 01:45:37
>↑history.length = 0ということではなくて
>そのウィンドウでの履歴に問題のURLが一度も出てきてない場合
そうですか。気づきませんでした。
ie5.cssとie5.jsも作ろっかな・・・(T_T)

確かに、IE4を普通に使っていれば大丈夫と思います。
でも、IE4互換モードや、IE4のスタイルシートキャンセルモードでは、
永遠に「if(ft.filters.revealTrans)」が「false」のはずなんです・・・。
今は確認できないんで、強くは言えないんですが・・・。
となると、回数制限付きで「置き換え」をしなくちゃいけないわけですが・・・。
気が重いです。

TAKI 1999/10/01(金) 02:58:13
index.htm内の
document.write('<link rel="stylesheet" type="text/css" href="ie4.css">');
の後にalert();を入れてちょっと中断してみると
リロードかけてもうまくいくみたいです。
もしかしたら、リロードした時に
ie4.cssのリロードが間に合ってないのかもしれません。

TAKI 1999/10/01(金) 04:09:48
>ie4.cssのリロードが間に合ってないのかもしれません。
この線けっこう濃厚かも。
一度index.htmを開いてie4.cssを読み込んだ後は
「戻る」「進む」でindex.htmに来てもちゃんと表示できるのに
キャッシュからie4.cssを削除したり
キャッシュの設定で「保存しているページの新しいバージョンの確認」
を「ページを表示する毎に確認する」とかにすると
とたんに表示できなくなるようです。
(今までは「起動ごとに確認」にしてました。)

>IE4のスタイルシートキャンセルモード
ところでこれってどうやってやるんでしょう?
設定の中さがしてみたけれど解らない…(;_;)

TAKI 1999/10/01(金) 06:41:57
ちがうじゃん。>自分
cssの読み込み間に合ってなかったら
visibility: hidden;も効かないはずですね。

なぜそうなるのかは全く解らないのですが
document.write('<link rel="stylesheet" type="text/css" href="ie4.css">');
より下に、何の意味も無く
<SCRIPT></SCRIPT>
と入れたら、何度リロードしてもうまく行きました。
…いいのかこれで、IE?
動かないバージョンが絶対にあるような気がする…。

Nobu3 [E-Mail] [HomePage] 1999/10/01(金) 07:18:53
「IE5でスタイルシートを無効にする方法」
http://member.nifty.ne.jp/bakera/html/junks/disablecss.html
「鳩丸倶楽部」の中にあります。ちなみにレジストリをいじります。IE4でも、大丈夫。

>document.write('<link rel="stylesheet" type="text/css" href="ie4.css">');
>より下に、何の意味も無く
><SCRIPT></SCRIPT>
>と入れたら、何度リロードしてもうまく行きました。
これは、「<script>を入れ子にする」ってことですか?
う〜ん・・・。一体何者なのか?IE・・・。

TAKI 1999/10/01(金) 07:25:40
>これは、「<script>を入れ子にする」ってことですか?
スミマセン、入れ子にならない場所です。
<STYLE>タグの前とか、<BODY>の後とか。
hiddenになったままの二つの<DIV>タグの間とかに入れると
なかなか面白いものが見られました。

>「IE5でスタイルシートを無効にする方法」
こんな方法があったのですね。ありがとうございます。
早速つかわせてもらおう。(^^)

Nobu3 [E-Mail] [HomePage] 1999/10/01(金) 09:25:10
[[解決]]
>スミマセン、入れ子にならない場所です。
ですよね。入れ子にできると「さすがIE」とか思ったり・・・。
いや、嘘です。

>hiddenになったままの二つの<DIV>タグの間とかに入れると
>なかなか面白いものが見られました。
う〜ん。確かに面白い挙動ですね(笑)
どうしてこうなるのでしょう???不思議です。
でも、確かに、動作するようになりました。
そこで、「ie4run」の定義を「ie4.css」の後に<script>ごと移してみると、予想どおりちゃんと動きました。
document.writeの後は、<script>でリセットしなくちゃいけないのかな?
理屈がわからないです・・・。

で、今のIEバージョンは「4.72,3612.1713」で「;SP2;3283;」です。

replace()もうまくいきました。ただ、その後リロードしても同じ事(replace)をするみたい。リロードは履歴には関係ないのかもしれません。
でも、スタイルシートを切ると(予想どおり?)無限ループでした・・・。

理屈はわかりませんが、解決にします。(一度やってみたかったし(笑))
SP1とSP2でOKなら大丈夫でしょう。
互換モードでは気になるところなんですが・・・。
ただ、フィルタがない場合は、
visibility='visible';
を入れることにします。・・・って、なんで今までこれを思いつかなかったのか(自爆)
ちゃんと元の状態でもうまくいきました。

TAKIさん本当にありがとうございました。

[上に] [前に] [次に]