onLoadでのリンク

[新着] Webテンプレートを仮オープンしました



0   名前: 七海 : 2007/03/05(月) 12:37  ID:UzV3P.h/ sub-Ax
onLoadのコマンド?からClick()を使って新しいウインドをターゲット指定でオープンさせたいんですが、いろいろ調べて試してみたんですが全然わからなくて。。(;^_^A アセアセ… 
普通にonLoadでのオープンは出来るんですがマウスをクリックしたイベントが必要なんですぅぅ

えと・・・Click()なんて書いてるんですが、onLoad時にマウスをクリックしたイベント発生してリンクできればいいんですが・・・・

どなたかこんな私に愛の手をお願いします。

1   名前: 匿名 : 2007/03/05(月) 12:37  ID:Z/T9lFdK sub-kJ
何を言ってるか本気で分からんですぅぅ。

詳細と用途を希望(特に、利用者に無断でクリックを発生させるのは悪用も可能なのだから)。


> マウスをクリックしたイベントが必要

とりあえず、この部分だけに反応してみる。
<p><a href="sample.html">TEST</a></p>

<script type="application/javascript">
// - Firefox 1.5+、Opera 9.0+。
// - Firefox はデフォルトアクションが発生しない?

if (document.implementation &&
    document.implementation.hasFeature ('MouseEvents', '2.0')
) {
    var target = document.getElementsByTagName ('a')[0];
    
    target.addEventListener ('click',
        function (event) {
            alert (event.target);
            event.preventDefault ();
        }, false);
    
    var event = document.createEvent ('MouseEvents');
    
    event.initMouseEvent ('click', true, true, document.defaultView,
        1, 0, 0, 0, 0, false, false, false, false, 0, null);
    
    target.dispatchEvent (event);
}
</script>

2   名前: 匿名 : 2007/03/05(月) 12:37  ID:Z/T9lFdK sub-kJ
> マウスをクリックしたイベントが必要

追加。
<p><a href="sample.html">TEST</a></p>

<!--[if gte IE 5.5]><script type="text/javascript">
// - IE 5.5+。
// - Opera は IE 専用の click() もサポートしている模様(fireEvent() は未サポート)。

var target = document.getElementsByTagName ('a')[0];

target.attachEvent ('onclick',
    function (event) {
        alert (event.srcElement);
        event.returnValue = false;
    } );

// target.click ();
target.fireEvent ('onclick');

</script><![endif]-->

3   名前: 丸痴 : 2007/03/05(月) 12:37  ID:4A9FyRrW sub-Ds
ここの方ですか?
http://odn.okwave.jp/qa2802528.html

あっちこっちで聞きまわるのはマナー違反です。
ルールは守りましょう。

4   名前: 匿名 : 2007/03/05(月) 12:37  ID:Z/T9lFdK sub-kJ
そうだったのか。ここ条件外のマルチポストは禁止なんだけどね。

じゃあ、とっとと終わりにしよう。まず、IE(および Opera)は、あらゆる要素オブジェクトが click メソッドを持つ。
// IE, Opera
var target = document.getElementsByTagName ('p');
target.click ();

だが、DOM HTML では HTMLInputElement のみ click メソッドを持つことになっている。それ以外のノードで click を発生させたい場合、DOM Events を利用して click イベントを作成し、対象ノードに通知する、という手順になる。
// Gecko, Opera, Safari
var target = document.getElementsByTagName ('p');
var event = document.createEvent ('MouseEvents');

event.initMouseEvent ('click', true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
// event.initEvent ('click', true, true);  // for Safari

target.dispatchEvent (event);

# ただし、現状 Safari は MouseEvent#initMouseEvent を持っていないので、上記でコメントアウトした Event#initEvent で初期化する。Gecko、Opera もこれで動作するので、むしろこちらの方が簡単かもしれない。
# また、>>1 でも触れたが、Firefox 1.5 は EventTarget#dispatchEvent した場合に、ブラウザのデフォルトアクションが動作しないようだ(Firefox 2.0 では未確認)。

以上の手順で、Gecko、Opera、Safari では、あらゆるノード上で、あらゆるイベントを、任意のタイミングで発火させることができる。


こうなると、IE でも click だけでなく、任意のイベントを発火させたくなる。そのためには fireEvent メソッドを使う。
// IE 5.5+
var target = document.getElementsByTagName ('p');
var event = document.createEventObject ();

event.something = 'ユーザ定義プロパティ';

target.fireEvent ('onclick', event);

作成したイベントオブジェクトには、任意のユーザ定義プロパティを付けることができる。このイベントオブジェクトは、イベントハンドラ内の第一引数として受け取ることもできるし、window.event として受け取ることも可能。

# なお、発火した時点で、イベントオブジェクトの type、srcElement、cancelBubble、returnValue は自動的に上書きされることに注意。
# fireEvent の第二引数を省略しても良い。IE が適当に作成してくれる。

以上の手順で、IE でも、あらゆる要素上で、あらゆるイベントを、任意のタイミングで発火させることができる。

終わり。

5   名前: 七海 : 2007/03/05(月) 12:37  ID:UzV3P.h/ sub-Ax
すみません<m(__)m>
他で聞くのがルール違反って知らなかったもので・・・
質問するの初めてなんです。
いつもネットで調べてなんとか解決してたんですが今回は完全に無理と判断して投稿してみました。

用途はグループでの情報共有でお互いのページに情報をフレームに表示させようと考案中です。

希望はonLoad時登録URLからランダムでターゲットフレーム内に表示させたいのですが・・・

ご迷惑おかけしました。。

6   名前: 匿名 : 2007/03/05(月) 12:37  ID:Z/T9lFdK sub-kJ
訂正:var target = document.getElementsByTagName ('p')[0];

7   名前: 七海 : 2007/03/05(月) 12:37  ID:UzV3P.h/ sub-Ax
匿名さん・ありがとうございます<m(__)m>
だけど・・・私の理解力の限界を超えてしまってるみたい(;^_^A アセアセ…
これから参考にして勉強してみようかと思ってるのですがぁぁぁ・・・
私は動作するサンプルがあってそれをイジリながら修正するぐらいの知識しか無いもので

もし・・もし・・可能であればサンプルなんか作る暇があったら作ってくれるとぉ 理解しやすいんですけどぉ
こんな無理を聞いていただけるなら
内容は上下に分けたフレームで上のHTMLからonLoadでイベントを発生させて下のフレーム内に表示です。
で・・・表示させるURLは複数登録でランダム表示。なんて感じなんですが・・・

むちゃくちゃな無理を言ってます・・・無理であれば無視して下さい。

ここをご覧の皆さん不愉快な思いをさせましたら・・ご免なさいですぅ<m(__)m>

8   名前: 七海 : 2007/03/05(月) 12:37  ID:UzV3P.h/ sub-Ax
匿名さん
良かったらメール下さい

9   名前: 匿名 : 2007/03/05(月) 12:37  ID:Z/T9lFdK sub-kJ
>>4
ああ、もう一つ書き忘れていた。

イベントを発生させるのではなく、単純にイベントハンドラを実行させたいだけの場合もある。組み込みイベントを開始タグ内に書き込むレガシーな方法を使っているならば、
<p onclick="alert ('OK'); ">..</p>

var node = document.getElementsByTagName ('p')[0];
node.onclick ();

単純にこれだけで良い(JavaScript 1.1+?/JScript 3.0+?)。もっとも、イベントオブジェクトは渡らない(それどころか、任意の引数を渡せてしまう)わけだが。


>>7-8
申し訳ないが、個人的なやり取りは控えさせて頂きたく。公開の場で情報交換する意味がなくなる。

私はあちらでどんなやり取りがあって、どこまで話が進んでいるのか、詳しくは見ていない。また、現時点であちらの方々にはマルチポストである旨が知らされていないから、追加の回答も来るだろう。そういう方々の努力を無にはしたくないし、私も無駄な重複回答をしたくない(だから、一気に説明だけ終えた)。

また、サンプルを作るにしても、仰っていることが抽象的すぎてよく分からない。サンプルが必要なら、目的と用途(それによって方法が決まる)、具体的な動作(イベントの種類と内容)・ページの構成(HTML)・その他必要要件(対象環境など)をきちんと書いてくれ(そのために「メールで」と言ったのかもしれないが)。現時点の情報だけでは、何も書けない。だいたい「ランダム」なんて要件を、私は初めて聞いたよ。

とにかく、私は現時点でこれ以上のことをするつもりはない(できない)。情報が分散して、お互いの連携がとれない状況なのだから。

10   名前: 七海 : 2007/03/05(月) 12:37  ID:UzV3P.h/ sub-Ax
わかりました。
ご迷惑おかけしました<m(__)m>

11   名前: カヅサツ ◆ThCi95HEzw : 2007/03/05(月) 12:37  [URL]  ID:O5hEMlpW sub-r2
っていうか、あちらにもマルチポストをしていた旨書いておかないと、あちらの回答者に無駄な重複回答をさせる可能性がありますよ(だから、マルチポストをするなら、双方にマルチ先を書きましょうとここの規約に書いてあるのです)。

一覧へ戻る