- PR -

javascriptにおける自動画面遷移について

投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 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から
同じようなことは実現不可能なのでしょうか

また何かわかればお願いします。
とりあえずこちらは業者側の方が変更可能かどうか
調べたいと思います。
87
会議室デビュー日: 2005/06/17
投稿数: 13
投稿日時: 2006-11-21 14:48
未記入さんがご提示されたVB6.0のコードでは、
画面Bを表示しているIEウィンドウに対するハンドル(でいいのかな)を持っていて
そのウィンドウに対して直に操作していると思います。

javascriptで行う場合でも、同様に操作対象となる画面Bのウィンドウへの参照を
取得する事が出来れば実装可能ではないかと思います。
(例えば、window.open()で画面Bを表示するとか。)

外していたらスミマセン。

#リニューアル前までは今まで出来ていたのですから
#やっぱり外してるかも・・・。
#業者の方に修正してもらえばOKなんでしょうかね。


[ メッセージ編集済み 編集者: 87 編集日時 2006-11-21 14:51 ]
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 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);
などいろいろためしたのですがオブジェクトがありませんという
エラーとなってしまいます。

具体的なコードとかどんな感じになるのでしょうか?
引き続き調べてみます。
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2006-11-22 09:20
おはようございます。

昨日から調べた結果でわかった部分が何点かあったので
書いてみます。

//alert(wnd.document.getElementById('ラベル').value);
をした時にエラーとなっていたのではブラウザを開いている
途中に(まだオブジェクトが生成されていない段階で)操作を
しようとした結果オブジェクトが存在しなくおちていたこと
がわかり処理の間に時間を持たせてやれば大丈夫なことは
わかりましたが(javascriptにはSLEEPがないので
代用としていいのはなんでしょうか、自分はforで回す位
しか・・・)
wnd.document.getElementById('ボタン').click
としてもボタンがクリックした状態にはなりませんでした。
引き続き調べてみます。
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2006-11-22 09:30
度々すいません

wnd.document.getElementById('ボタン').click();
カッコをつけることでうまくいきました

あとSLEEPの代替案でいいのがあればお願いします。
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2006-11-22 10:18
ここまででjavascriptにてwindow.openとして画面をもう一つだし
その画面を操作する方法についてはわかったのですが、

実際に実装の方を行い動作させたところ
(開いたwindowのテキストボックスに値セットの部分)
’アクセスが拒否されました’
というエラーが出てしまいました。
インターネットにて調べたところ、他のサーバーにあるページ
に対しての制御などは出来ないというのがちらほら書いてあり
ました 確かに他のページに値を埋め込むような行為はセキュリティ
上よくないのはわかるのですが
前に書いたようにVB6.0からの操作の場合は出来るのがどうもなっとく
できません。
このあたりわかる方がおられましたら宜しくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-11-22 10:22
引用:

未記入さんの書き込み (2006-11-22 09:30) より:

あとSLEEPの代替案でいいのがあればお願いします。


JavaScript には Sleep や Wait のような仕組みはありません。
setTimeout 関数でブロック用のフラグを設けるくらいしか思いつきません。
正確な Wait でなくても良いのであれば、for を使うのも手でしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
KOX
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 142
投稿日時: 2006-11-22 10:30
僕もsetTimeoutを使用すれば問題ないと思いますよ。

setTimeoutを呼び出している関数を再帰呼び出しをして、
オブジェクトが生成されるまで繰返す。
といったところでしょうか。
#永久ループにならないように気をつけて・・・

スキルアップ/キャリアアップ(JOB@IT)