WEB相談室

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

タイトル:marqueeを無効化する方法はありますか?

Katsukun [WriteDate : Mon Jun 18 23:15:47 2001]

論理要素は勿論のこと、物理要素や独自拡張の要素も
大体は、ユーザースタイルシート(!importantを指定)を使用すれば、
製作者のスタイルを上書きできると思うのですが、
IE独自の marquee だけは、何をやっても無効化できません。^^;;

marquee のスクロールを無効化して
普通のテキストとして表示する方法を、
どなたかご存知でしたら教えてください。


Piro [MAIL] [URL] [WriteDate : Mon Jun 18 23:31:21 2001]

marquee { display: none !imporatant; }
とか。(根本的解決にはなってないけど)


Katsukun [WriteDate : Tue Jun 19 03:36:17 2001]

> marquee { display: none !imporatant; }
> とか。(根本的解決にはなってないけど)

あまり重要ではない内容の場合の方が多いので、
表示しないようにしても問題ないかもしれませんね。^^;
でも、やっぱり表示されないと困ります。^^;

marquee は、独自拡張の要素の中で一番強悪な気がします...
IEは、marquee を無効化する機能を付けるべきですよね。
そもそも、製作者が使わないようになるのが一番ですが...

P.S.
IE独自の中でもルビの機能はなかなか便利ですよね。
XHTML1.1で採用されたみたいだし。


カヅサツ [MAIL] [URL] [WriteDate : Tue Jun 19 09:52:59 2001]

marquee はどうしようもないみたいですね。
そういうツールを自作するしかないかと思います
(marquee を div に置換するとか。Makoto さん(誰)にリクエストしてみようかしら)。

いっそのこと Netscape6 あるいは Mozilla browser に乗り換えるとか。
res 以下のフォルダにデフォルトの CSS ファイルがあるので、
それを修正すればユーザスタイルシートになります
(言うまでもなくバックアップは大切に)。
ただ、反映させるにはブラウザを再起動しなきゃならないんで、
ちょい面倒ですが。


通りすがり [WriteDate : Wed Jun 20 02:03:31 2001]

Proxomitron みたいなフィルタリングツールを
使うというのではだめなんですかね?


さっぱり★ [WriteDate : Wed Jun 20 10:04:23 2001]

IEのコンテキストメニューでやってみました。

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExtに「マーキー解除」キーを追加して「contexts」を127、「(標準)」をC:\WINDOWS\WEB\marquee.htmとしたら、
そのファイルにこう記述します。

<script type="text/javascript">
//マーキー解除
var doc = external.menuArguments.document;
var max = doc.all.length;
var elm;
var flg = 0;
for (var i = 0; i < max; i++) {
    elm = doc.all(i);
    if (elm.tagName == "P") flg=1;
    if (elm.tagName == "MARQUEE") {
        if (flg==1) {
            elm.outerHTML = "<span>"+elm.innerHTML+"</span><br>";
        }
        else {
            elm.outerHTML = "<div>"+elm.innerHTML+"</div>";
        }
    }
}
</script>

Pが閉じられていないとエラーになるのでちょっと変なことをしています。
もっといい方法があるかと思います。
誰か考えてくれませんか。

参考:http://www.microsoft.com/JAPAN/support/kb/articles/J041/2/49.htm


Katsukun [WriteDate : Wed Jun 20 12:50:16 2001]

カヅサツ さん >
> marquee はどうしようもないみたいですね。
> そういうツールを自作するしかないかと思います
> (marquee を div に置換するとか。Makoto さん(誰)にリクエストしてみようかしら)。

やっぱり、そうですか。笑)
もしかして、Makoto さんって
『コンテクストメニュー追加セット(http://say.vis.ne.jp/script/etc/)』の作者の方ですか?
これは、とても便利です!
ちょっと改造してコンテキストメニューに、いっぱい登録しました。

> いっそのこと Netscape6 あるいは Mozilla browser に乗り換えるとか。
> res 以下のフォルダにデフォルトの CSS ファイルがあるので、
> それを修正すればユーザスタイルシートになります

時々、変更して遊んでます。笑)
むしろ、Netscape 6 の方が良いのですが、ちょっと重いです...

> ただ、反映させるにはブラウザを再起動しなきゃならないんで、
> ちょい面倒ですが。

そうですよねぇ。面倒くさいですよねぇ。


通りすがり さん >
Proxomitron って何ですか?


さっぱり★ さん >
> IEのコンテキストメニューでやってみました。

やろうと思えば何でも出来るんですねぇ!
これも、Makoto氏の製作された
「コンテクストメニュー追加セット」と同じような方法ですね。

> Pが閉じられていないとエラーになるのでちょっと変なことをしています。
> もっといい方法があるかと思います。
> 誰か考えてくれませんか。

コンテキストメニューも便利ですけど、
『鳩丸ご意見番 Internet Explorer 5 でスタイルシートを無効にする方法
(http://www.ne.jp/asahi/minazuki/bakera/html/opinion/disablecss)』
みたいな感じに、常にオフに出来たら便利ですよねぇ。
何方か製作していただけませんか?


risk [WriteDate : Wed Jun 20 14:25:36 2001]

>Proxomitron って何ですか?
日本語サポートページ
http://www.pluto.dti.ne.jp/~tengu/proxomitron/


元常連 [MAIL] [URL] [WriteDate : Wed Jun 20 16:36:16 2001]

ユーザースタイルシートで以下のようにする手があります。
IE5.0以上でないとダメですが。

--- ○○.css ---
marquee{color:expression(this.outerHTML=this.innerHTML)}
/* ↑プロパティは何でもいい */
---


ma-to [WriteDate : Wed Jun 20 19:34:05 2001]


>marquee{color:expression(this.outerHTML=this.innerHTML)}

私はこの場合、延々と処理が繰り返されるのを回避する為に

if(!document.flag){
....
document.flag=true;
}

とします。


そんなことよりも、例えば

<p><marquee><div>...</div></marquee></p>

は、置換後には

<p><div>...</div></p>

となります。3Cのhtmlではもちろん共に不正ですが、IEでは置換前は正しいdomで、置換後は不正です。

だから、、、省略します。結論を言えば強制的に電源を切るしか方法がない状態になるはずです。


元常連 [MAIL] [URL] [WriteDate : Wed Jun 20 19:56:38 2001]

> 延々と処理が繰り返されるのを回避する為に
繰り返されませんよ。
一回実行されたらmarqueeはなくなっちゃうんだから。
> 結論を言えば強制的に電源を切るしか方法がない状態になるはずです。
なりません。確認済みです。
> 3Cのhtmlではもちろん共に不正ですが
(略)


ma-to [WriteDate : Thu Jun 21 01:18:06 2001]


>一回実行されたらmarqueeはなくなっちゃうんだから。

これに関しては投稿した後に気付きました。


>なりません。確認済みです。

どんな確認??ですか。最近これを使って時間を潰していることが多いのですが、結構これには悩まされます。


元常連さん(正確には何処の何方様でしょう?)はもっと確かなレスをしてくれるだろうと思っていましたがいささか拍子抜けです。

提示された方法では指摘した問題があります。かといって多くの分岐をするのもおかしいと思います。結局はdivに変えるなりしてbody開始タグ直後に挿入するのが無難だとなるでしょうが、これは実際の所は上手くいかないような気がするし、小汚いので作ってみようという気にもならない。

だからユーザーシートはここでは不適切だと思います。


Katsukun [URL] [WriteDate : Sat Jun 23 14:57:10 2001]

>marquee{color:expression(this.outerHTML=this.innerHTML)}
うまくいきました。


ma-to [WriteDate : Sat Jun 23 19:49:15 2001]


>>marquee{color:expression(this.outerHTML=this.innerHTML)}
>うまくいきました。

気分悪い!(笑)。
うまくいかないよ。上手く行くのは大概の場合は重大なエラーが出そうなhtmlに出会わないからであり、私が指摘したhtmlを試せば上手くいかない事が分かりますよ。
結構基本的なことなのになんで知らないんだろう???


ma-to [WriteDate : Sat Jun 23 20:21:55 2001]


もし間違ったユーザーシートを有効にしたままなら、以下を試す前に無効にしておいて下さい。

<html>
<head><title>all collection test 1</title></head>
<body>
<h1>all 1</h1>
<p><marquee><div>...</div></marquee></p>
<script type="text/javascript"><!--
alert(document.all.length);
//--></script>
</body>
</html>

<html>
<head><title>all collection test 2</title></head>
<body>
<h1>all 2</h1>
<p><div>...</div></p>
<script type="text/javascript"><!--
alert(document.all.length);
//--></script>
</body>
</html>

上は「9」と返る。
下はmarqueeタグを削除しているから「8」になるはずだが、この文書のdomがIEにとって不正だからエラー処理されて「9」が返る。
不正なdomへの操作はエラーになる。
単なるJavaScriptであればエラーの警告が1回出て終わり。
でもcssでJavaScriptを使うと、IEは色んな状況に対応する為にまるでsetIntervalな振る舞いをしているから、エラーは延々と出る。
cssでJavaScriptを使う類の人(私も含まれる)は、エラーを毎回警告する設定にしているだろうから、エラーが出ている限りはctrl+alt+deleteも出来ずに、結局は手っ取り早く電源を切ることになるだろう。
「未知の文書」に適用されるユーザーシートで不注意なdom操作を行うことはこのように危険なことです。


さっぱり★ [WriteDate : Tue Jun 26 08:25:06 2001]

>ma-toさん
逆にいえば、スクリプトを無効にしてさえいれば、元常連さんの方法もいいということですか?
marqueeを無効にしたいくらいなので、スクリプトを切っていることは十分考えられるし、ユーザースタイルシートでできればスマートだと思うのですが。

>元常連さん
<marquee style="color:red">赤</marquee>
が消えませんね。プロパティを変えるべきでしょうか?

最初の方法は
doc.body.innerHTML=doc.body.innerHTML.replace(/<MARQUEE/g,'<DIV');
doc.body.innerHTML=doc.body.innerHTML.replace(/</MARQUEE>/g,'</DIV>');
などとやった方が簡単でいいかもしれません。


さっぱり★ [WriteDate : Tue Jun 26 10:04:57 2001]

訂正。
.replace(/</MARQUEE>/g,'</DIV>') → .replace(/<\/MARQUEE>/g,'</DIV>')
「\」が抜けてました。


おーなーしぇふ [WriteDate : Wed Jun 27 00:47:01 2001]

完全な無効策とはいえないでしょうが、以下のような方法はダメでしょうか?
1回スクロール(というか、スライド?)して止まります。
※とりあえずWin版IE5.5にて確認

MARQUEE {
    behavior1: expression( this.behavior = 'slide' );
    behavior2: expression( this.direction = 'up' );
    behavior3: expression( this.style.width = '100%' );
    behavior4: expression( this.style.height = '5em' );
}


おーなーしぇふ [WriteDate : Wed Jun 27 00:47:52 2001]

追記です。まあ「妥協策」程度ということで(^^;)

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]
ChaichanPAPA's World