- - PR -
javascriptにおける自動画面遷移について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-11-21 13:24
冬寂さん 87さん
何度もお返事ありがとうございます。 やはりjavascriptから他のページのボタンをクリック して画面を遷移するようなことは出来ないんですね (ポストして遷移させることは可能のようですが) ちなみに自分がこれが可能だと思った経緯は VB6.0にて下記コードのような実装を行った 場合はきちんと最後のページまで遷移しました。 VB6.0から出きるのでjavascriptからも可能と おもったもので VB6.0のコード Dim IE As Object Set IE = CreateObject("InternetExplorer.Application") IE.Navigate strURL(とび先のURL) IE.Visible = True Do While IE.Busy DoEvents Loop If Not Mfc_SetIE_Object(obj01, IE, "UserId") Then Exit Sub obj01.Value = P_Ini_HP_ID If Not Mfc_SetIE_Object(obj01, IE, "passWd") Then Exit Sub obj01.Value = P_Ini_HP_PASS If Not Mfc_SetIE_Object(obj01, IE, "loginButton") Then Exit Sub 'ログイン obj01.Click Do While IE.Busy DoEvents Loop 〜 Private Function Mfc_SetIE_Object(objDmy As Object, IE As Object, strSetCtl As String) As Boolean On Error GoTo ErrTrap Mfc_SetIE_Object = False Set objDmy = Nothing Set objDmy = IE.Document.getElementByID(strSetCtl) If objDmy Is Nothing Then Sleep (3000) DoEvents Set objDmy = Nothing Set objDmy = IE.Document.getElementByID(strSetCtl) If objDmy Is Nothing Then Set IE = Nothing Set objDmy = Nothing Mfc_SetIE_Object = False Call MsgBox("データの設定に失敗しました。入力してください。", vbApplicationModal + vbMsgBoxSetForeground, GC_APNAME) Else Mfc_SetIE_Object = True End If Else Mfc_SetIE_Object = True End If Exit Function ErrTrap: Mfc_SetIE_Object = False End Function のようにして実現できるのですがやはりこれは VBとIEでの特別なやり方であってjavascriptから 同じようなことは実現不可能なのでしょうか また何かわかればお願いします。 とりあえずこちらは業者側の方が変更可能かどうか 調べたいと思います。 | ||||
|
投稿日時: 2006-11-21 14:48
未記入さんがご提示されたVB6.0のコードでは、
画面Bを表示しているIEウィンドウに対するハンドル(でいいのかな)を持っていて そのウィンドウに対して直に操作していると思います。 javascriptで行う場合でも、同様に操作対象となる画面Bのウィンドウへの参照を 取得する事が出来れば実装可能ではないかと思います。 (例えば、window.open()で画面Bを表示するとか。) 外していたらスミマセン。 #リニューアル前までは今まで出来ていたのですから #やっぱり外してるかも・・・。 #業者の方に修正してもらえばOKなんでしょうかね。 [ メッセージ編集済み 編集者: 87 編集日時 2006-11-21 14:51 ] | ||||
|
投稿日時: 2006-11-21 17:46
87さんお返事ありがとうございます。
//window.open()で画面Bを表示するとか 上記のような場合であれば確かに実装可能か もしれないというのは自分でもなんとなく わかるのですが実装的にはどんな感じに なるのでしょうか 一応 var wnd; wnd = window.open("http://〜"); とすると画面Bは表示されました そしてwndにオブジェクト が格納されたと思い alert(wnd.document.getElementById('ラベル').value); や alert(wnd.document.Form1.getElementById('ラベル').value); などいろいろためしたのですがオブジェクトがありませんという エラーとなってしまいます。 具体的なコードとかどんな感じになるのでしょうか? 引き続き調べてみます。 | ||||
|
投稿日時: 2006-11-22 09:20
おはようございます。
昨日から調べた結果でわかった部分が何点かあったので 書いてみます。 //alert(wnd.document.getElementById('ラベル').value); をした時にエラーとなっていたのではブラウザを開いている 途中に(まだオブジェクトが生成されていない段階で)操作を しようとした結果オブジェクトが存在しなくおちていたこと がわかり処理の間に時間を持たせてやれば大丈夫なことは わかりましたが(javascriptにはSLEEPがないので 代用としていいのはなんでしょうか、自分はforで回す位 しか・・・) wnd.document.getElementById('ボタン').click としてもボタンがクリックした状態にはなりませんでした。 引き続き調べてみます。 | ||||
|
投稿日時: 2006-11-22 09:30
度々すいません
wnd.document.getElementById('ボタン').click(); カッコをつけることでうまくいきました あとSLEEPの代替案でいいのがあればお願いします。 | ||||
|
投稿日時: 2006-11-22 10:18
ここまででjavascriptにてwindow.openとして画面をもう一つだし
その画面を操作する方法についてはわかったのですが、 実際に実装の方を行い動作させたところ (開いたwindowのテキストボックスに値セットの部分) ’アクセスが拒否されました’ というエラーが出てしまいました。 インターネットにて調べたところ、他のサーバーにあるページ に対しての制御などは出来ないというのがちらほら書いてあり ました 確かに他のページに値を埋め込むような行為はセキュリティ 上よくないのはわかるのですが 前に書いたようにVB6.0からの操作の場合は出来るのがどうもなっとく できません。 このあたりわかる方がおられましたら宜しくお願いします。 | ||||
|
投稿日時: 2006-11-22 10:22
JavaScript には Sleep や Wait のような仕組みはありません。 setTimeout 関数でブロック用のフラグを設けるくらいしか思いつきません。 正確な Wait でなくても良いのであれば、for を使うのも手でしょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-11-22 10:30
僕もsetTimeoutを使用すれば問題ないと思いますよ。
setTimeoutを呼び出している関数を再帰呼び出しをして、 オブジェクトが生成されるまで繰返す。 といったところでしょうか。 #永久ループにならないように気をつけて・・・ |