問題タブ [iwebbrowser2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - IWebBrowser2::Navigate2エラー処理
エラーを処理する正しい方法は何ですか?私は次のようなコードを作成し、MSDNで見つけたすべてのエラーコードを処理しましたが、それでも、「不明」というエラーが表示されることがあります。
visual-c++ - CAxWindow の応答しないスクリプトの実行を停止する方法 -> IWebBrowser2 -> Navigate
を使用して、ATL exe でブラウザー コントロールをホストしていCAxWindow::CreateControl()
ます。IWebBrowser2
次に、インターフェイスをクエリして、URL に移動します。に電話した後IWebBrowser2->Navigate
、次のことを確認します
IWebBrowser2->get_ReadyState (&result)
とIWebBrowser2->get_Busy(&bBusyStatus);
そして、私が呼び出す上記の値に基づいてIWebBrowser2->Stop();
しかし、URL に無限ループがある場合、スクリプトの実行は停止せず、しばらくすると次のメッセージが表示されます。
"Stop running this script?
A script on this page is causing your web browser to run slowly....."
このメッセージ ボックスを抑制し、タイムアウトを監視し、独自のカスタム メッセージを表示して、スクリプトの実行を停止したいと考えています。しかし、これを達成する方法がわかりません。これまたは別のアイデアに対する助けがあれば、大歓迎です。
注:IWebBrowser2->Quit()
スクリプトを中止しても効果はありません。
私はVC++、ATLを使用しています。
session - NewWindow3 処理のために別の埋め込み IWebBrowser2 を開くと、埋め込み IWebBrowser2 でセッションが期限切れになる
私は、複数のブラウザー ウィンドウを開くマルチスレッドの WTL ベースのアプリケーションに取り組んでいます。それぞれに、ブラウジング用の独自の埋め込み IWebBrowser2 インスタンスがあり、それぞれが個別の UI スレッドにあります。
NewWindow3 に応答して、新しいブラウザ ウィンドウを開き、新しいウィンドウIWebBrowser2->get_Application()
を返しますIDispatchPtr
。
ポップアップが目的のサイトを開いている間、このポップアップが開かれた元のウィンドウのセッションは期限切れになります。元のウィンドウでさらにナビゲーションを行うと、ログイン ページに戻ります。
誰かが私を助けるために重要かもしれないと私が思ったいくつかのポイント -
NewWindow3
これは、が空でないbstrUrlContext
(元の URL を含む 3 番目のパラメーター)で起動された場合にのみ発生します。- NewWindow3 処理の一部として、以下が行われます -
- 新しい IWebBrowser2 埋め込みウィンドウの作成
Create()
、パラメータzWindowName
の値に設定bstrUrlContext
- 返された
IDispatch
ポインタは、IWebBrowser2->get_Application()
- 新しい IWebBrowser2 埋め込みウィンドウの作成
winapi - WebBrowser コントロールを非表示にする
コントロールを表示せずに HTML を画像に変換する Win32 アプリケーションがあります。(Win32 アプリケーションで ActiveX を使用した経験はあまりありません)。
この MSDN の記事に従って、コントロールと呼び出しを作成しましたNavigate()
: http://msdn.microsoft.com/en-us/library/aa451946.aspx
画像を変換する必要がある場合は、 を呼び出しますIViewObjec::Draw()
。問題は、次の関数を呼び出しても、コントロールが常に表示されることです。
コードに足を踏み入れたとき、私が呼び出すときに
コントロールはすぐに表示されます。しかし、MSDNからわかることは、それがOLEIVERB_INPLACEACTIVATE
意味することです
メニューやツールバーなど、エンド ユーザーがオブジェクトの動作や外観を変更する必要があるツールを表示せずに、オブジェクトをその場でアクティブにします。このようなオブジェクトをシングルクリックすると、ユーザー インターフェイス ツールの表示がコンテナーとネゴシエートされます。コンテナが拒否した場合、オブジェクトはアクティブなままですが、ツールは表示されません。
少し混乱しています。隠したいだけです。
iwebbrowser2 - ローカル HTML ページの読み込み時に DocumentComplete イベントが発生しない
ローカルの HTML ファイルを IE に読み込み、DocumentComplete イベントを受け取ることを期待しています。発射されることはありません。NavigateComplete と ProgressChange も試しましたが、同様に起動されません。コードは次のとおりです。
Web 上のページを参照している場合、すべてのイベントを受け取ります。では、なぜ彼らはローカルページで解雇されないのでしょうか?
c++ - モーダル HTML ダイアログを表示する IE Web アプリケーションを自動化するには?
[わかりやすくするためにもう一度修正]
Web サイトと対話する C++ プログラムがあります。このサイトは IE 固有のものであり、私のプログラムも同様です。
通常の方法で IE の実行中のインスタンスに接続しています (アウト プロセス-- コードを参照)。を取得したら、個々のオブジェクトを取得して操作し、フィールドに入力してボタンをクリックすることにIWebBrowser2
問題はありません。IHTMLDocument2
IHTMLElement
しかし、Web ページにwindow.showModalDialogを呼び出す JavaScript が含まれている場合、行き詰まります。他のページと同様に、ポップアップ内の HTML 要素を操作する必要があります。しかし、私はそれを取得できないようですIWebBrowser2
。
ポップアップのタイトルは常に「Web ページ ダイアログ」でInternet Explorer_TridentDlgFrame
、Internet Explorer_Server
. Internet Explorer_Server
しかし、通常の IE インスタンスの場合のように、ウィンドウから IWebBrowser2 を取得することはできません。
を取得できますが、 を取得IHTMLDocument2Ptr
しようとすると が取得されます。IWebBrowser2
HRESULT
E_NOINTERFACE
コードはかなり標準的なもので、「通常の」IE ウィンドウであれば問題なく動作します。
重要な場合、これはVistaとIE8です。(これらの両方が、XP/IE7 で問題なく動作していたコードベースに重大な変更をもたらしたため、これを強調します。)
繰り返しますが、私の目標は、それぞれを取得IHTMLElement
して操作することです。自動化しているアプリケーションのソース コードにアクセスできません。
キーストロークをやみくもにInternet Explorer_Server
ウィンドウに送信することを検討していますが、そうではありません。
追加するために編集:
誰かが子ウィンドウを取得してメッセージを送信することを提案しましたが、それは動作しないと確信していInternet Explorer_Server
ます。Spy++ によると、子ウィンドウはありません。(これは IE 固有のものではありません。Java アプレットにも子ウィンドウはないようです。)
アップデート
コメントの中で、Simon Maurer は、上記のコードがうまく機能したと述べ、タイプミスがないことを確認するために、完全なスタンドアロン アプリをPastebinに非常に寛大に投稿しました。私が彼のコードを使用すると、同じ場所で同じように失敗し、ポップアップではなく、基になるページに接続したいと彼が考えていることに気付きました。そのため、上記のテキストを編集して、そのあいまいさを取り除きました。