C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

webbrowserでJava functionを操作したい /ヒデキ (18/07/31(Tue) 14:45) #88066
Re[1]: webbrowserでJava functionを操作したい /Hongliang (18/07/31(Tue) 14:53) #88067
  └ Re[2]: webbrowserでJava functionを操作したい /ヒデキ (18/07/31(Tue) 16:32) #88069
    └ Re[3]: webbrowserでJava functionを操作したい /Hongliang (18/07/31(Tue) 17:28) #88070
      └ Re[4]: webbrowserでJava functionを操作したい /ヒデキ (18/07/31(Tue) 22:15) #88073
        └ Re[5]: webbrowserでJava functionを操作したい /WebSurfer (18/08/01(Wed) 12:22) #88076
          └ Re[6]: webbrowserでJava functionを操作したい /ヒデキ (18/08/01(Wed) 16:55) #88081
            └ Re[7]: webbrowserでJava functionを操作したい /ヒデキ (18/08/01(Wed) 18:15) #88084 解決済み


親記事 / ▼[ 88067 ]
■88066 / 親階層)  webbrowserでJava functionを操作したい
□投稿者/ ヒデキ (5回)-(2018/07/31(Tue) 14:45:08)

分類:[VB.NET/VB2005 以降] 

お世話になります。
以下の場合、どうしたらJavaのFunctionを操作できますでしょうか?

手動では「削除する」ボタンをクリックすると登録できるのですが
どういうコードで動作するのかがわかりません。

function deleteData()

{
	if (!window.confirm(getmsg('hdy_delete_CHK')))
		return false;
	$("#mainform").attr("action", "/rsv/reservations");
	mySubmit('showDetailHdy_del');
}

<input name="" type="submit" value="削除する" class="btn back" onclick="javascript:deleteData();return false;">

と、いう ページ(一部を抜粋しています。)に

        For Each element As HtmlElement In elements
            If element.GetAttribute("value") = "削除する" Then
                    element.InvokeMember("click")                                               '1
                    element.SetAttribute("onclick", "true")                                     '2
                    element.SetAttribute("onclick", "javascript:deleteData();return false;")    '3
                complete = True
                Exit For
            End If
        Next

と、試行してみましたが どれも反応がないようです。

また、
        'https://juangotoh.hatenablog.com/entry/2017/09/10/015917
        'セキュリティのために無効化されているWebBrowserコントロールの、
    Script URL Migration機能を有効にすればいいらしい。
    これは、コントロールが初期化される前に、レジストリに書き込む必要がある。

も、試してみましたが 変化ありませんでした。

どうぞよろしくお願いいたします。



[ □ Tree ] 返信 編集キー/

▲[ 88066 ] / ▼[ 88069 ]
■88067 / 1階層)  Re[1]: webbrowserでJava functionを操作したい
□投稿者/ Hongliang (666回)-(2018/07/31(Tue) 14:53:33)
JavaじゃなくてJavaScriptですよね?
WebBrowser1.Document.InvokeScript("deleteData", Nothing)
のように、関数を直接実行する方法でいけませんか?
[ 親 88066 / □ Tree ] 返信 編集キー/

▲[ 88067 ] / ▼[ 88070 ]
■88069 / 2階層)  Re[2]: webbrowserでJava functionを操作したい
□投稿者/ ヒデキ (6回)-(2018/07/31(Tue) 16:32:04)
No88067 (Hongliang さん) に返信
> JavaじゃなくてJavaScriptですよね?
そうです。大変失礼しました。

> WebBrowser1.Document.InvokeScript("deleteData", Nothing)
> のように、関数を直接実行する方法でいけませんか?

ありがとうございます。
試させていただきましたが どうやらダメなようです。

[ 親 88066 / □ Tree ] 返信 編集キー/

▲[ 88069 ] / ▼[ 88073 ]
■88070 / 3階層)  Re[3]: webbrowserでJava functionを操作したい
□投稿者/ Hongliang (667回)-(2018/07/31(Tue) 17:28:02)
一応の確認ですが、WebBrowserコントロールで表示している状態でそのボタンをクリックした場合は正常に動作するのですね?

Navigate直後に実行しようとしていませんか?
[ 親 88066 / □ Tree ] 返信 編集キー/

▲[ 88070 ] / ▼[ 88076 ]
■88073 / 4階層)  Re[4]: webbrowserでJava functionを操作したい
□投稿者/ ヒデキ (7回)-(2018/07/31(Tue) 22:15:57)
No88070 (Hongliang さん) に返信

> Navigate直後に実行しようとしていませんか?

すみません。おっしゃる通りです。

        Do While WB.Web.ReadyState <> 4
            System.Windows.Forms.Application.DoEvents()
        Loop

の後に 大きすぎですが 

        System.Threading.Thread.Sleep(10000)

をいれたら 動作しました。

本当にありがとうございました。






[ 親 88066 / □ Tree ] 返信 編集キー/

▲[ 88073 ] / ▼[ 88081 ]
■88076 / 5階層)  Re[5]: webbrowserでJava functionを操作したい
□投稿者/ WebSurfer (1570回)-(2018/08/01(Wed) 12:22:25)
No88073 (ヒデキ さん) に返信
> ■No88070 (Hongliang さん) に返信
>
>>Navigate直後に実行しようとしていませんか?
>
> すみません。おっしゃる通りです。
>
> Do While WB.Web.ReadyState <> 4
> System.Windows.Forms.Application.DoEvents()
> Loop
>
> の後に 大きすぎですが 
>
> System.Threading.Thread.Sleep(10000)
>
> をいれたら 動作しました。

WebBrowser には DocumentCompleted イベントというものがあって、WebBrowser コントロール
でドキュメントの読み込みが終了したときに発生します。

その発生を待って処理する、即ち DocumentCompleted イベントにハンドラをアタッチして、そ
のハンドラの中で処置するべきです。

質問者さんが書いている DoEvents() をループに入れるコードをネットの記事などで時々目に
しますが、はっきり言って間違いです。(そういうコードが書いてある記事は信用しないこと
をお勧めします)

もちろん Thread.Sleep(10000) も間違いです。

何らかの問題(サーバーダウンなど)で終了しない場合は、ドキュメントの読み込みが終了しな
い = DocumentCompleted イベントは発生しないことになりますが、タイマーなどを使ってある
時間待って DocumentCompleted イベントが発生しない場合の処理を書いてください。
[ 親 88066 / □ Tree ] 返信 編集キー/

▲[ 88076 ] / ▼[ 88084 ]
■88081 / 6階層)  Re[6]: webbrowserでJava functionを操作したい
□投稿者/ ヒデキ (8回)-(2018/08/01(Wed) 16:55:05)
> その発生を待って処理する、即ち DocumentCompleted イベントにハンドラをアタッチして、そ
> のハンドラの中で処置するべきです。
> 

ありがとうございます。

こういう感じでよろしいのででしょうか?

Form1にWebBroser1,Timer1を張り付けて
以下のコードをペーストします。

Public Class Form1

    Public WebDocumentCompleted As Boolean = False
    Public NavigateNum As Integer = 0       'NavigateComplete内で処理の仕分けをするため

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Timer1.Interval = 500  'NavigateCompleteできない場合 5秒待つ

        WebBrowser1.Navigate("https://hoge.com/")
        NavigateNum = 1

    End Sub

    Private Sub WebBrowser1_Navigating(sender As Object, e As WebBrowserNavigatingEventArgs) Handles WebBrowser1.Navigating

        Timer1.Enabled = True  'タイマー開始
        WebDocumentCompleted = False    '初期値セット
    End Sub

    Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted

        WebDocumentCompleted = True
        AfterNavigate()

    End Sub

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick

        Timer1.Enabled = False

        If WebDocumentCompleted = False Then
            WebDocumentCompleted = True
            AfterNavigate()

        End If
    End Sub

    Private Sub AfterNavigate()

        Select Case NavigateNum
            Case 1
                'WebBrowser1.Navigate("https://hoge.com/")を処理後の処理	
            Case 2
                '他の処理
            Case 3
                '他の処理

                '  &#9483;
        End Select
    End Sub
End Class

お教えいただいて 自分で思いついたのは これくらいなんですが、
もしも、DocumentCompleted イベントにハンドラをアタッチして、そのハンドラの中で処置する コードをご存知でしたら お教えいただけましたら幸いでございます。どうぞよろしくお願いいたします。

[ 親 88066 / □ Tree ] 返信 編集キー/

▲[ 88081 ] / 返信無し
■88084 / 7階層)  Re[7]: webbrowserでJava functionを操作したい
□投稿者/ ヒデキ (10回)-(2018/08/01(Wed) 18:15:11)
すみません。
同じような内容を見つけました。

https://dobon.net/vb/bbs/log3-46/27873.html

色々と大変お世話になり感謝です。
ありがとうございました。
解決済み
[ 親 88066 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -