- 締切済み
JavaScript、以外に手が都とがないHtml
現在Javaスクリプトのお勉強も 兼ねて悪質な自動スクリプト敵滅に日々勤しんでるものなんですが 指定時間内に別のページに飛ぶスクリプトで頭を悩ませてるところです。 基本「五秒間エンカンウト」したのちに自動的に別のサイトに 飛ぶ等の一連のプロセスはmetaタグを使ってrefresh属性を 使って飛ぶのがベストのようにどうしても絞り込まれてしまいます。それも一つのやり方ではありますが それだと使わなくてはイケないブラウザが絞られてキマすし第一 大量のリンクや画像にアクセスするのにはあまり向いてはいない。 そこで以下の様なソースを提示します。 ----------------Htmlに埋め込まれたJavascript <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 11.0.0.0 for Windows"> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <script type="text/javascript"> var j=0; var ADC = { /* ↓設定1 表示する広告 []内に '画像パス+ファイル名' を カンマで区切って並べる。長い場合 区切りのカンマ, 直後の改行は可能 */ imgs:['imge/eli0181.jpg','imge/eli0181_1.jpg','imge/eli0181_2.jpg'] , /* ↓設定2 画像と同じ順でリンク先を登録。書式は画像と同じ */ anc:['imgs/eli0181.jpg','imgs/eli0181_1.jpg','imgs/eli0181_2.jpg'] , /* ↓設定3 表示用画像タグのID '' で囲む */ id:'ADimage1' , /* ↓設定4 リンク先を開くウィンドウ 0:このウィンドウ 1:ウィンドウを開く */ win:1 , /* ↓設定5 広告切替時間 1000 = 1秒 */ sec:3000 , /* ↓設定6 ループ 0:しない 1:する */ loop:0 , /* 設定項目終り */ set:function(O){ /*↑関数を決め時の単なる名前*/ if(!document.getElementById && !document.all){ return false; /*allは一番目も含めたすべての画像の意味*/} O.tmp =[]; for(var i=0; i<O.imgs.length; i++){O.tmp[i] = new Image(); O.tmp[i].src = O.imgs[i];} O.ido = document.getElementById(O.id) || document.all(O.id); /*idはHtml上からしか習得できず、しかもOnlyOneである*/ O.add(O.ido,'click', function(){ if(O.win){ /*window.open(O.anc[O.now],'AD');*/ }else{ top.location.href = O.anc[O.now]; }}); O.ido.style.cursor = 'pointer'; if(O.Tid){clearTimeout(O.Tid); } O.now =-1; var CHG = function(){ if(++O.now >= O.tmp.length|| !O.tmp[O.now]){ if(!O.loop){ return false; } O.now = 0; } j+=1; O.ido.src = O.tmp[O.now].src; O.Tid = setTimeout(CHG, O.sec); }; CHG(); },add:function(obj, type, func){ if(obj.addEventListener){ obj.addEventListener(type, func, false); /*Listerner(アクション,関数, objクラスの複数のプロパティを同一ソース上で上書きできる しかし、メソッドそのものは区別がある*/ }else{ if(obj.attachEvent) obj.attachEvent('on' + type, func); } },Tid:undefined }; ADC.add(window, 'load', function(){ ADC.set(ADC) }); </script> <TITLE></TITLE> </HEAD> <BODY> <img id='ADimage1' src="imge/eli0181.jpg"> </BODY> </HTML> -------------------------------------------------------------------------------- 参照元:http://www.artemis.ac/contents/javascript/jscopy5.htm このソースを見る限りメソッド部分にのみ限定してラインINを 行う再帰処理のように思えます。ページ間の合間に合間に意図的に 初歩的な文字表示からHtmlページ挿入まで色々やってみましたが思ったような アウトカウントを得ることができません。 自分は最終的に何をしたいかというと、極小的にいえば川島教授の 鬼トレに出てくる「鬼計算」や「鬼記号」や「鬼耳算」のような知育用の ゲームを一般的に公開していきたいと考えています。 つまり流動的に瞬間暗記して決められたリズムで正しく正確にフィード バックも兼ねつつ決められバック数だけ遡る様なプログラムをです。 クラアイアントが指定した回想数またはバック数の要求に対して入力 フォームなどのレスポンスを返したいのです。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- CyberCypher
- ベストアンサー率73% (39/53)
タイポが酷く読み辛いです 本題に対して言えば ”正しく正確に”とは完全には不可能です。 javascriptはクライアント言語とはいえ クライアントのブラウザ環境に依存するため アドオンなどにより動作が阻害されてしまう恐れがあり リアルタイム処理でも時間が飛んでしまったりと正確ではありません それでも処理をしたいのなら setTimeoutが無難でしょう 今回例に挙げている中にも使われていますが 時間を計測する時や一定時間ごとに処理をしたいのであれば setTimeoutかsetIntervalがプログラムの肝となるかと…… ステップ数やカウントなどをグローバルに持っておき 即時実行関数ではなく明確に関数を定義して逐次処理を行えば良いかと思います アウトカウントとは何でしょうか?不正解の問題数という事でしょうか? 独自に定義した単語を使用しないか説明をいただけると理解しやすくなると思います。 ところでjQueryは使用する予定はあるのでしょうか? コード数、ステップ数が増えるのならjQueryを使用した方が楽な場合もあります flashを作成して埋め込むのも一つの手段です 出かけ先なので取り急ぎ返答まで……