• ベストアンサー

イベントをつかってコールバックさせたいのですが

HTAスクリプトでIEを起動し、ページが表示されるのを待つプログラムを 作成しようとしています。 JavaScriptではスリープができないのでisBusyをがfalseになるのを 待つ代わりに、IEオブジェクトのイベントからコールバックさせようと思いました。 そこで次のプログラムを書いたのですが、 イベントハンドラ登録の文法が間違っているらしく、実行時に 「オブジェクトでサポートされていないメソッドまたはプロパティです」 になってしまいます。 この行でやりたいことは、ieオブジェクトの NavigateComplete2 イベントが発生したときに、onComplete が呼ばれるようにすることです。 イベントハンドラの登録方法、または ieがページを読み終わるのを検知するよい方法がありましたら お教え下さい。よろしくお願いします。 ■sample.hta <html> <script> function perform(){   var ie = new ActiveXObject("InternetExplorer.Application");   ie.visible=true;   ie.navigateComplete2 = onComplete; // ←この行がエラー   ie.navigate("http://www.1101.com"); } function onComplete(a, b){   alert("complete"); } </script> <body> <input type=button onclick="perform();" value="open"> </body> </html>

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

  • ベストアンサー
  • MrYoYoYo
  • ベストアンサー率33% (38/115)
回答No.2

そもそも navigateComplete2 なんてイベントは聞いた事がないです。 ということで調べてみましたが、VBで使われるイベントじゃないですか? VBのコンポーネントとして同じようなものがありました。

thamansa
質問者

補足

var ie = new ActiveXObject("InternetExplorer.Application"); で返ってくるオブジェクトって、InternetExplorerオブジェクトだと思ったので、MSDNの次のページのリファレンスを見て http://msdn2.microsoft.com/en-us/library/Aa752084.aspx navigateComplete2 イベントが使えると思ったんですが・・・

その他の回答 (1)

noname#39970
noname#39970
回答No.1

ページの表示を待つなら onload では?

thamansa
質問者

補足

回答ありがとうございます。 しかし、イベント名をonloadに置き換えても、 「オブジェクトでサポートされていないメソッドまたはプロパティです」 になってしまいました。

関連するQ&A

  • イベントevt?evt.target:event.srcElement;の意味合い

    以下の理解で合っているのでしょうか? よくイベントの取得で エレメント.onclick = function(evt){ var e = evt?evt.target:event.srcElement; } でeにイベントオブジェクトの発生元要素をセットしているのを見かけますが、 これは、ブラウザーの違いの吸収なのでしょうか? firefoxでは、イベントハンドラー関数にイベントオブジェクトが渡されるので、渡されたイベントオブジェクトよりevt.targetで発生元要素をセットし、一方IEでは、eventという名前のオブジェクトが存在している(?)ので、イベントハンドラー関数にイベントオブジェクトが渡されず、event.srcElementで発生元要素をセットする。  ※Opera、Safariは何でも良い IEの場合、後から、イベントが追加されたらeventオブジェクトはどうなるのでしょうか?ある要素の一つのイベントタイプには一つのイベントハンドラーしか定義できないのでしょうか?

  • オブジェクトとイベントにつきまして

    javascript超初心者です。。 今仮に、スクリプトの中でメソッド、プロパティ、イベントやイベントハンドラの前に、オブジェクトを入れるとします。(たとえば、window.aleart~など) その中でも、イベントやイベントハンドラをスクリプトの中に書くとして、ナビゲーターオブジェクトをその前に書く時、documentなのかwindowなのか、また他のオブジェクトなのか、使い分け方が分かりません。 大変稚拙な質問で申し訳ありませんが、javascriptの先輩方、どういうイベント(イベントハンドラ)の時にwindowで、どういうイベント(イベントハンドラ)の時にdocumentなのか等、ご回答頂けると本当に助かります。 どうぞよろしくお願い致します。

  • prototype.jsのAjax.Requestでeventを引数にしたのですが

    prototype.jsのAjax.Requestといつ便利な関数がありますが onComplete時の引数にeventオブジェクトを設定したらIE7では eventオブジェクトが引き継げませんでした。 たとえばこのようなメソッドで function ajax_request(url, params, method, ele1, ele2){ var nt = new Date(); var pr = params + "&nt=" + nt.getTime(); var a = new Ajax.Request( url, { method: "get", parameters: pr, onComplete: function(request){ method(request, ele1, ele2); } } ) }; ele1にeventオブジェクトを設定し、methodを実行しても デバックで、ele1.typeが何も表示されませんでした。 firefox2.0だと「click」など正しく表示もされオブジェクトが引き継がれておりました。 何が問題なのでしょうか?それともIE7ではeventオブジェクトを引き継ぐことは出来ないのでしょうか?

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

    例えば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()の実行 となりました。(これもなぜこうなるのかよくわかりせん) 以上、イベントハンドラに最初から任意に入れられている処理を残しつつ、 さらに処理を加えるにはどうすればよいのかご教示お願いします。

  • ロード後にイベントをセットしたい

    初めからタグに埋め込まないで、ロード後にイベントをセットしたいと思い、 データを送信してからonCompleteの関数の中に記述しました。 ちゃんとonCompleteの中に来ていることは確認できたのですが、 idがtestのタグをクリックしても反応がありません。 以下のプログラムのどこがいけないのでしょうか? <script type="text/javascript" src="prototype.js"></script> function post_data() { new Ajax.Request( "test.php", { method: "get", parameters: "test=aa", onComplete: function(httpObj){ var obj = document.getElementById("test"); obj.onClick = sample; } } ); } function sample() { alert("aa"); } window.onload = function() { post_data(); } <a href="" id="test">test</a>

  • イベントハンドラの関数の引数について

    こんにちは。 Object.onmouseoverのイベントハンドラにObject.classNameとeventを引数とする関数(func1)を指定するにはどのような風にしたら良いでしょうか?以下のように 試しましたがいずれも動きません。 function func1(obj,event){・・・} (1)Object.onmouseover=function(){func1(Object.className,event)} //エラー:Object.classNameはNull (2)Object.onmouseover=function(Object.className,event){func1(Object.className,event)} //無反応 (3)Object.onmouseover="func1("+Object.className+",event)"; //onmouseoverでない時にfunc1が呼び出される。 よろしくお願いいたします。

  • Ajax.Updaterで読み込んだ先の要素にイベントを設定したい

    Ajaxの勉強をしているのですが、非同期通信で要素を書き換えた後の処理について困っています。 現在、prototype.jsのAjax.Updaterを利用して下記のようなソースを書き、動作の検証を行っているのですが、読み込み元のファイル(test.1html)から読み込んだ先(test2.html)の要素を取得することは出来ても、その要素に対してイベントを設定することが出来ません。 具体的に言うと、 targ2の要素をクリックすると、test2.html内のtarg3の要素を取得出来てアラートが走りますが、targ3の要素をクリックしてもイベントが実行されないという状況です。 このtarg3の要素に対してイベントを設定するにはどのようにすれば良いでしょうか? ○test1.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Ajaxtest</title> <script src="prototype.js"></script> <script> window.onload=function(){ Event.observe('targ1', 'click', handler1); Event.observe('targ2', 'click', handler2); Event.observe('targ3', 'click', handler3); } function handler1() { var myajax = new Ajax.Updater(      {success : "targetString"},      "test2.html",      {evalScripts:true}); } function handler2() { alert($('targ3').innerHTML); } function handler3() { alert($('targ3').innerHTML); } </script> </head> <body> <div id="targ1">押して非同期通信開始</div> <div id="targ2">非同期通信終了後に押す</div> <div id="targetString"></div> </body> </html> ○test2.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Ajaxtest</title> </head> <body> <div id="targ3">非同期通信で呼ばれた要素</div> </body> </html>

    • ベストアンサー
    • AJAX
  • JSのイベントターゲット が難しい

    JSのイベントターゲット (EventTarget)が難しくてよくわからないのですが初心者にもわかるように解説していただけるとありがたいです。 https://developer.mozilla.org/en-US/docs/Web/API/EventTarget イベントターゲット(EventTarget)は、DOMイベントを受け取り、それらへのリスナーを持つことが出来るオブジェクトによって実装されるDOMインターフェースです。 Elementと、 documentと、 windowは、ほとんどの共通イベントターゲットですが、 例えば、XMLHttpRequest、AudioNode、AudioContextなど、 他のオブジェクトもエベントターゲットになることが可能です。 多くのイベントターゲット(Element、document、windowを含む)は、 onXXXプロパティと属性を介して、 イベントハンドラの設定もサポートします。 メソッド .addEventListener() 要素にイベントハンドラを登録します。 .dispatchEvent() DOM内のノードのイベントを実行します。 .removeEventListener() EventTarget.addEventListenerを使用して登録されたイベントリスナーを削除します。 イベントを発動させる要素につけるイベントファンクションのようなものなのでしょうか?

  • evtとは

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title>イベント情報の取得</title> </head> <body> <script type="text/javascript"> <!-- // ページのロード時に呼び出される関数initをセット window.onload=init; // ページのロード時に呼び出される関数 function init(){ // onclickイベントハンドラを定義 document.getElementById("txt").onclick=msg; } // onclickイベントハンドラ関数 function msg(evt){ // W3C DOMとIEの両方のイベントオブジェクトに対応 evt = (evt) ? evt : ((event) ? event : null); alert(evt.type+"されました"); } //--> </script> <div id="txt">クリックしてください</div> </body> </html> 上記のコードで【MozillaやOperaなどのブラウザでは、イベントハンドラ関数を設定した場合にも、関数の引数としてイベントオブジェクトが渡される】とのことですが、イベントハンドラ関数msgに渡されているevt【function msg(evt){】はいきなり出て、何を意味しているのかよくわかりません。 このコードを見て推測できる方、アドバイスをお願い致します。

  • イベントハンドラを外部ファイルに分離させた時のevent.target

    イベントハンドラを外部ファイルに分離させた時のevent.target||event.srcElementの挙動について質問です。お願いします。xhtmlの<div>に直接書いていたeventハンドラを外部に分離しました。 JavaScript ------------------------------ function Test() { var n = document.getElementsByTagName('div')[0]; n.onmouseover = function() { var m = event.target||event.srcElement; var j = m.tagName; alert(j); } } $(function() { Test(); }); ------------------------------ xhtml ------------------------------ <div> <p><img src="img01.png" width="300" height="300" /></p> </div> ------------------------------ n.onmouseover後のfunction()ですが、FireFoxで動きません。 function()をfunction(event)にするとFireFoxで動くようになりますが、IEで動かなくなります。 FireFox、IE両方動くようにするにはどういう記述にしたらいいでしょうか?

専門家に質問してみよう