Webbrowserでセキュリティの警告を回避するには


Keiko  2005-11-25 18:36:52  No: 92918

WebBrowseでホームページをクリックさせているとたまに警告のウインドウが表示され、その先はYESなどをClickしてあげないとこれ以上進まなくなります。
SendKeysでキーを送れば良いのですが、ホームページの読み込みがあまりにも遅いとタイミングが合いません、IE.Silent = True と警告を出さなくすると先に進みません、警告が出ているというイベントなどは取得できないものでしょうか、もしくはこれの回避方法ご存知でしたらご指導頂けませんかよろしくお願いします。


WEB初心者  2005-11-26 00:57:14  No: 92919

私も似たようなことを過去にここで教えてもらいましたので
ご紹介します。

http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200503/05030070.txt

但し警告ウィンドウがそのページ内で発するように書かれた
ものだけで、IEやWindowsが発した警告は、そうそう簡単
にいくと、何のためのセキュリティかわからないので、きっ
と無理かも。


Keiko  2005-11-26 07:33:57  No: 92920

WEB初心者さん回答ありがとうございます。
>但し警告ウィンドウがそのページ内で発するように書かれた
>ものだけで、IEやWindowsが発した警告は、そうそう簡単
>にいくと、何のためのセキュリティかわからないので、きっ
>と無理かも。
WEB初心者さんの言うとおりですねで、もどうしてもこの警告を回避したいのです。
警告が出ているということだけでも判れば良いのですが、警告を処理しないと戻ることも進むこともできないしエラー処理もエラーになるしどうしようのありません
なにか方法ないものですかね。


魔界の仮面弁士  2005-11-26 08:22:49  No: 92921

その『警告』とやらの内容がわからなかったので、
制御できるかどうかは保証できませんが…
  onerror イベント
で捕らえる事はできませんか?

サンプルを書いてみました。あまりテストしてませんけど。
http://www.ocv.ne.jp/~oratorio/junk/Sample/38/WebBrowserErrorCheck.lzh

# これで駄目なら、ホストの実装が必要かも。


Keiko  2005-11-27 08:26:30  No: 92922

魔界の仮面弁士さん、ありがとうございます、感謝感激です、こんなやり方があったとは気が付きませんでした、サンプルまで作っていただき本当にありがとうございます。まだ完璧に理解していないのですが、このプログラムでWebBrowser.Document.parentWindow.onerrorを観察していれば警告が出たことが判るようですね、今まで警告が出ることが判っていたのでSendkeysで回避していたのですが、Sendkeysを使わなくてもparentWindowのどこかのOBJECTをClickもしくはSubmitすればYES  OR  NOが選択できると思ったのですが間違っていますでしょうか、警告を出した時にうまくデバッグできずどこをいじったらよいのか迷っています、たいていはDocument.Forms.elementあたりだと思うのですがうまくプログラムが止められず中身がNullです、もしご存知でしたらご指導頂けませんかよろしくお願いします。


魔界の仮面弁士  2005-11-27 13:05:45  No: 92923

> もしご存知でしたら
残念ながら存じません

……というよりは、どのように回答すべきかさえわからない、
というの正直な所ですけれどね。(^_^;)

先の投稿にも少し書きましたが、問題になっているという、その『警告』の
内容が一切記述されていませんでしたので、そもそも onerror などで
解決できる問題なのかさえ、把握できていない状態だったりします。

> 警告が出たことが判るようですね
状況が曖昧なので、なんとも答えにくいのですが、とりあえず、
「スクリプトエラー」に関しては、その方法で判るかと思いますよ。

サンプルにて書いた windowオブジェクトの onerrorイベントというのは、
「スクリプトに関するエラー」を処理する為のイベントとなります。(IE4以上)

そして、このイベントの戻り値、または event オブジェクトの
returnValue プロパティに True を返す事で、Internet Explorerの
既定のメッセージが抑制されます。先のサンプルは、それを示したものです。

詳細は、下記を参照してください。
http://www.microsoft.com/japan/developer/library/jpisdk/dhtml/references/events/onerror_0.htm

しかし、Web閲覧時に出る「警告」のすべてが、スクリプトエラーによる物と
いうわけではありませんし、スクリプトエラーで無いなら、onerror は無意味です。

まずは、何が原因で発生している警告なのかをきちんと調査してみてください。
場合によっては、VB側で握りつぶす方法を模索するよりも、そもそもの
警告の原因を取り除く方が、解決への近道だったりする可能性もありますしね。


Keiko  2005-11-28 20:51:19  No: 92924

魔界の仮面弁士さん丁寧な回答ありがとうございます。
返信遅くなってすいません、
警告ですが、私の無知で警告を出している所はは1つだと思っていたので、文章が違うだけで回避方法は一緒だと思っていました。
警告の内容ですが下記のとうりです。

[セキュリティで保護されていない接続へリダイレクトされています。]
[現在のサイトへ送信中の情報は、セキュリティで保護されていないサイトヘ再送信される可能性があります。続行しますか?]

と出ています、ユーザー名、パスワードを入れてログインしようとした時に出てくるのでたぶんCookieを書き込まれる事によるセキュリティの警告だと思いますが、これは無理ですかね、Onerrorには引っかかってきませんしIEのOBJECTの中身をいろいろ探ったのですが該当しそうなところがありませんでした、現在はSendkeysで"Y"を送って回避しているのですがホームページの読み込みが遅いと空振りします、もし良いアイディア知っていましたら教えていただけませんか、よろしくお願いします。


魔界の仮面弁士  2005-11-28 23:37:03  No: 92925

[インターネットオプション]の設定はどうように設定していますか?

セキュリティの[暗号化されていないフォームデータの送信]の所とか、
詳細設定の[保護付き/保護なしのサイト間を移動する場合に警告する]とか。


VB梅  2005-12-06 18:54:17  No: 92926

以前  WebBrowser(JavaScript)でalert("")などの警告によりVB自体が
固まってしまうのを別のプログラムから操作して警告を解除していました。
IE自体の警告もボタン名が"OK"があれば反応するようです
セキュリティ警告により、VBが固まらないのであれば、自プログラムから
子(警告)ウインドウを検出しクリックも可能かもしれません。

プログラムの中身は良くわかりません・・・・・
APIについてはここがおすすめです。
http://www.winapi-database.com/category.html
サンプルを載せておきます。
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwd As Long, ByVal buf As String, ByVal bln As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwd As Long, ByVal Msg As Long, ByVal wpara As Long, ByVal lpara As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwd As Long, ByVal cmd As Long) As Long
Private Sub Form_Load()
    Timer1.Interval = 1000
End Sub

Private Sub Timer1_Timer()
    Dim hWnd      As Long
    Dim hChild    As Long
    Dim sWndText  As String
    Dim lRet      As Long
    
    '親ウインドウの名前"WEB"のハンドルを検出
    hWnd = FindWindow(vbNullString, "WEB")
    'その親ハンドルから子ウインドウのハンドル検出
    hChild = GetWindow(hWnd, 6)
    'その子ハンドルからボタンのハンドルを検出?
    hChild = GetWindow(hChild, 5)
    
    sWndText = Space(256)
    'そのボタンのハンドルの表示名を抽出?
    lRet = GetWindowText(hChild, sWndText, Len(sWndText))
    lRet = InStr(sWndText, vbNullChar)
    sWndText = Trim(Left(sWndText, lRet - 1))
    
    'ボタン名が"OK"ならクリック
    If sWndText = "OK" Then
        '子ウインドウのボタンをアクティブにする?
        SendMessage hChild, &H6, 2, ByVal 0&
        '子ウインドウのボタンをクリックにする
        SendMessage hChild, &HF5, 1, ByVal 0&
    End If
End Sub


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加