• ベストアンサー

Javascriptについて

ちょっと判りにくいかもしれませんが、例えばonloadでイベントを発生させるスクリプトを書き込んだページをある条件のときはイベントを発生させないようなスクリプトってあるのでしょうか? (例)リンクからonloadでウインドウを立ち上がらせるページを作ったとして、別のリンクから同じページを立ち上がらせる時にはウインドウを開かせないようにしたいのですが・・

質問者が選んだベストアンサー

  • ベストアンサー
noname#199778
noname#199778
回答No.3

補足読みました。 だいぶ端折った書き方をしたのでちょっと不親切でしたね。 失礼しました。 スクリプトの書き方ですが、スクリプト本体はウィンドウを開かせるページ内に記述します。 onloadのあるページのhead内に記述してください。 onloadの記述については、「<body onload="openWin()">」とすればよいです。 myurlについては、たとえば「B.htmlというページのリンクからこのページに来た場合には新しいウィンドウを開かない」というケースでは、B.htmlのURLの一部(ファイル名そのもの)を入れて、「myurl="B.html"」と記述します。 もし「自サイトの中からリンクでこのページに入ったときにはウィンドウを開かない」、という条件であれば、自分のサイトのアドレスの共通部分を入れます。 サイトのアドレスが「http://website.jp/lead/」であった場合は、「myurl="http://website.jp/lead/"」とします。 こんな感じでよろしいでしょうか? わかりにくければ、また補足します。 なお、このスクリプトの動作確認は、ローカル環境(パソコンの中)では取れない可能性があります。 動作確認するときには、サーバにアップロードしてから確認してみて下さい。 これではうまくいかなかった場合は、補足してくださいね。

logomark
質問者

お礼

有難うございます。 上手くいきました。最初ローカルで一所懸命動作確認してたもので・・・奥が深い物です。

その他の回答 (2)

noname#41120
noname#41120
回答No.2

イベントハンドラをonloadからアンカークリックのonclickにしてみる方法はだめですか?onloadだと表示したらなにがなんでもプログラムを起動してしまうけど。 onclickだとクリックしたターゲットで使い分けができると思うけど。 または開いてしまったウィンドウをonclickで閉じさせる設定が出きるかも 一例 <script language="javascript"> <!-- var オブジェクト名; function closewin(){ if(オブジェクト名.close == false){ オブジェクト名.close(); } else{ alert("既に閉じられています"); } } //--> </script> <body> <a 省略 onclick="closewin()">開いたら閉じる</a> </body> など開いたウィンドオブジェクトをリモートで閉じさせる方法など だめかも自信ないですけど。

noname#199778
noname#199778
回答No.1

onloadで起動する処理の中に、条件分岐を設定すればよいでしょう。 onload内で条件分岐を記述して関数を呼び出すかどうかを分けてもいいでしょうし、関数の中で処理を進行させるかどうかを条件分岐させても良いでしょうね。 例の場合であれば、前ページのURL情報などを引き出しておいて、その情報から条件分岐をしてウィンドウを開くかどうかを分けるスクリプトにすればよいでしょう。 他の質問で私が回答した内容の流用ですが、一例として… <script type="text/javascript"><!-- prevuri=document.referrer; myuri="*******"; /* myuriには、そのページからきた場合には別リンクを開かせたくない時の、そのリンク元のページのURLの一部(ファイル名など)を入れておきます。 「別のリンクから同じページを立ち上がらせる時にはウインドウを開かせないようにしたい」このリンク元のページのURLです。 */ function openWin(){ if (!prevuri.match(myuri)){ window.open("***.htm","_blank",""); } } //--></script> こうした場合、特定のページからリンクをたどってくれば、新しいウィンドウを開くことはありませんが、それ以外の場合はページロードされたときに新しいウィンドウを開きます。 こんな感じで、条件分岐を利用してイベントの処理を中止させる・ないし起動させないことは十分に可能ですよ。 参考になれば幸いです。

logomark
質問者

補足

ドンピシャのご回答有難うございます。ただ、恥ずかしながら初心者のため、イマイチ記述方法がわかりづらいのですが・・このスクリプトはonlordを書き込んだページに記入すれば良いのですよね。myuri="****"のあたりがイマイチどう書いてよいのか・・詳しくお願いできませんか?

関連するQ&A

  • JavaScriptを最後に実行するには?

    JavaScriptでリンクをランダムに表示するようにしたところ、 少し表示が遅く感じるようになったため、 最後にJavaScriptを実行するようにonloadイベントを使って [外部(JavaScript)ファイル] <!-- window.onload = function onload(){ var random = Math.floor(Math.random() * 3); if(random == 0) document.write('<a href="URL1">サイト名1</a>'); else if(random == 1) document.write('<a href="URL2">サイト名2</a>'); else if(random == 2) document.write('<a href="URL3">サイト名3</a>'); }; //--> [HTMLファイル内] <script type="text/javascript" src="./フォルダ名/ファイル名.js"></script> のように書いて試しましたが、真っ白なページにこのスクリプトの内容だけが表示されてしまいます。 "window.onload = function onload{"と、最後の"};"の部分を追加するまでは普通に動いていました。 また、ページ内に、別の外部ファイルも含めて同じようなものを複数組み込みたいと思っています。 この方法でなんとか表示したいのですが、 別の方法も含め、情報をいただきたいです。 わかりにくいところがあれば補足します。 よろしくお願いします。

  • javascriptでクリックしたリンクテキストを取得するには?

    javascriptを用いてクリックしたリンクのテキストを取得するにはどうすればいいでしょうか? ページ読み込み時(onload)にリンクにonClickイベントをつけてクリックしたときにurlなどを取得することはできるのですが、リンクテキストをどうしても取得できません。 ページ内のそれぞれのリンクタグにそれぞれ異なるid要素をつけられればよさそうなのですが。。。 ページ内のリンクタグにidがついていないことしてください。

  • イベントハンドラを使わずに実行するには?

    googleのように、ページが読み込まれたらフォームにフォーカスを 移すということをやりたいのですが、onLoadのようなイベントを 使わずに行うことは出来ますでしょうか? 掲示板でこの機能を使いたいと思っています。しかし、全てのページに フォームがあるわけではないので、<body onLoad="~">で実現すると フォームがない時にエラーが発生してしまいます。 document.write( "hoehoe" ); が直書きで実行されるなら同じようにできるのでは? と思って <script> <!-- document.form.comment.focus(); // --> </script> とやってみましたができませんでした。 onLoadを使わない方法、もしくは<body>以外でonLoadを使う方法が ありましたら是非教えてください。

  • なにもイベントがないところでJavaScriptを動かしたい

    初心者の為、ご教授願います。 Pl./SQLで開発を行っております。 その中で、OnLoad時にJavaScriptを起動させているのですが、 そのプログラムの中で別にJavaScriptを起動させたいのです。 何をやりたいかと言うと、チェックをかけてエラーだったら、 JavaScriptのようなダイアログを出力したいのです。 イベントは発生しないので、どのようにメッセージを出せば良いのか 分かりません。Web上では表示したくないのです。 どうか、お力添えを宜しくお願い致します。

  • window.onloadなどあらかじめ用意された物以外でページが最後

    window.onloadなどあらかじめ用意された物以外でページが最後まで読み込まれたか判定したいです。 条件を書きますね。 1.window.onloadなど直接head要素、またbodyの各イベント属性に記述は出来ない状態です。 2.掲示板の上部にフリーテキストの部分があり、その部分のみ扱えます。使えるタグが制限されています。インライン要素はstrongブロック要素はdivです。このためインラインでスクリプトを書いて行きます。 window.onloadが発生した後やwindow.onabortが発生して ちょっと経った後にブラウザが「読み込みすでに完了済み」や 「読み込みを中断済み」のような何らかの値をどこかに格納したりしないのでしょうか。 また代替処置をするならばどんなスクリプトが有効でしょうか。 なるべく色んなページに対応したいです。 例えばbodyの中身が全部読まれているか判定したり、 一番最後の要素が読まれたかどうか判定するスクリプトです。 もっとも一番最後の要素が読まれたかどうかを判定するアナログなやり方だと window.onabortの時などイレギュラーな時に うまく行かないので出来るだけ何か画期的なものを探しています。 JSが好きな方々、よろしくお願いします。

  • javascriptのイベント処理について。

    イベント今回の場合は、onloadです。 この場合、 function a(){ 条件(1) 条件(2) 条件(3) } これを、例えば、条件(2)を実行した場合に、 html側で、(2)を実行したと判断するには、無理なのでしょうか。 どう考えても、イベントなので、戻り値を返す場所がないですよね。 何か良い方法はないでしょうか。 宜しくお願いします。

  • 外部javascriptの重複を防ぐには

    簡単なタグを貼り付けるだけで使えるブログパーツを、javascriptで作ろうとしています。 <■コード(1)> <script type="text/javascript" src="http://ex.com/js/test.js"></script> <div> <img class="imgobj" src="http://ex.com/dm.gif" width=1 height=1/> </div> 上記のように外部JSを読み、そのJSの中でimgタグのonloadイベントを記述し、そのイベントの処理でimgタグの直前にテキストを書き出すようにしています。これはidなどを意識しなくてもタグを貼りつけた場所に出力されるようにするための措置です。 上記は単独で貼り付ける場合はうまくいったのですが、同じコードを複數貼り付けると外部JSの衝突でエラーになります。よって外部JSの読み込みを動的にしてみました。 <■コード(2)> <script type="text/javascript"> var obj=""; obj = document.getElementById("example_tag"); if( !obj ){ var ele = document.createElement("script"); ele.id = "amacusplus_scriptfile"; ele.type = "text/javascript"; ele.src = "http://ex.com/test.js"; document.body.appendChild(ele); } </script> <div> <img class="imgobj" src="http://ex.com/dm.gif" width=1 height=1/> </div> このソースを同じページ内で二箇所貼り付けると、 今度は動的な外部JSの読み込みとimgタグのonload処理の発生タイミングが微妙なため挙動不審になってしまいました。成功したり失敗したり・・・。 とこのような状況で煮詰まっています。 質問は (1)外部JSの動的な読み込みの後に、明示的にimgのonloadイベントを起こすことはできないか? がメインですが、他のアプローチで解決できればそれでもいいので (2)<script>~</script>内に書いたjavascript内で、現在位置を知る方法(scriptエレメントを知る方法) (3)複数回読まれても重複を起こさない外部JSやその読み込み方法の書き方 などなにかヒントになるようなことを教えて頂きたいのです。 よろしくお願いします。

  • 開いたタブ(ウィンドウ)にフォーカスが当たらない

    IE8 をタブモードで利用したとき、新しく開いた タブ(ウィンドウ)にフォーカスが当たりません。 JavaScript の window.open で別タブ(ウィンドウ)を 表示する処理を onload イベントで行うと、新しい タブ(ウィンドウ)にフォーカスがあたりません。 button のクリックイベントで表示した場合は、 新しいタブ(ウィンドウ)にフォーカスが当たります。 やりたいことは submit してページを再表示するときに 新しいタブ(ウィンドウ)を表示して、そちらにフォー カスを設定することです。 また、できればブラウザのバージョンによって処理を 切り替えるようなことはしたくありません。 何か原因や解決策などありましたらご教授ください。 よろしくお願いします。 <この現象が発生する環境> IE8 と IE7 で下記のように設定した場合 ツール → インターネットオプション → 全般タブ  → タブ → 設定  → ポップアップの発生時  の設定を   「常に新しいタブでポップアップを開く」  にする。 ※IE9 ではこの現象は発生せず、新しいタブ(ウィンドウ)に  フォーカスがあたります。 ※IE7, 8 でもタブモードではなく、別ウィンドウで開く  設定になっている場合は、新しいウィンドウにフォーカスが  あたります。 <サンプルソースと説明> (説明) test1.html から window.open で test2.html を表示します。 onload で表示したときは test2.html のタブ(ウィンドウ)に フォーカスがあたりません。 button のクリックイベントで表示したときは test2.html の タブ(ウィンドウ)にフォーカスがあたります。 ---(test1.html)---------------------------------- <html> <head runat="server"> <title></title> <script language="javascript" type="text/javascript"> window.onload = function () { OpenWindowTest(); } function OpenWindowTest() { var TestWin = window.open('test2.html'); TestWin.document.focus(); } </script> </head> <body> <form> <div> <input type="button" value="button" onclick="OpenWindowTest();" /> <br /> <input type="submit" value="submit" /> </div> </form> </body> </html> --------------------------------------------------- ---(test2.html)---------------------------------- <html> <body onload="window.focus();"> テストページ </body> </html> ---------------------------------------------------

  • イベントハンドラに処理を追加するには?

    例えばbodyタグのonloadイベントハンドラに JavaScriptを使って処理を追加するにはどうすればよいのでしょうか? 例) ・rei.htm <html>  <script language="JavaScript" type="text/javascript">  function hoge(){   alert("hogeです");  }  function foo(){   alert("fooです");  }  </script>  <body onload="hoge();">  </body>  <script language="JavaScript" type="text/javascript">  document.body.onload += foo();  </script> <html> ※前提条件として、変更可能な箇所はscriptタグ内のみとなります。 「こんなんでいけないかな?」と思って上記のようにやってみたのですがうまくいきませんでした。 (結果はfoo()のみ実行され、hoge()は実行されませんでした。 alertでbody.onloadの中身を確認すると『function anonymous{hoge();}undefined』と表示されるので、なぜfoo()が実行されてhoge()が実行されないのかよくわかりませんが‥) また試しに document.body.onload += foo(); これを以下のように変更してみました。 document.body.onload = foo(); この時は、 ・foo()の実行  ↓ ・javascriptエラー  ↓ ・hoge()の実行 となりました。(これもなぜこうなるのかよくわかりせん) 以上、イベントハンドラに最初から任意に入れられている処理を残しつつ、 さらに処理を加えるにはどうすればよいのかご教示お願いします。

  • JavaScriptエラー。

    下記のような記述で、CGIのページを新規ウィンドウで開くように 作っているのですがIE6で開くとスクリプトエラーが発生してし まいます。 ちなみに、FireFoxではエラーが発生しません。 function open1(){ win=window.open("ファイル名.cgi","new","width=650,height=500,scrollbars=yes"); win.moveTo(100,100); } CGIのページを直接開いてもエラーが発生しないようにするには どうしたらよいのでしょうか? お願いします。