IEコンポーネントを使い倒すスレ
■ このスレッドは過去ログ倉庫に格納されています
0001IUnknown
NGNGIEコンポーネントを利用したブラウザのプログラミングに関する情報の交換及び再
利用を目的とした総合情報スレッドです。
=====================================
最近IEコンポーネントを利用してブラウザを作るプログラマが増えてきました。こ
れから自作してみようという人も多いでしょう。コンポーネントを貼り付けるだけ
なら誰でも出来ますが複雑な制御を行うにはそれなりの経験や知識が要るようです。
私自身が知りたいのも山々ですが、似たような質問が分散するのを避けるためにも
統一しましょう。ブラウザ作者、COM に精通した方大歓迎です。もちろん公開した
くない "禁断のテク" もあると思いますが、そこは各人の判断ということでお願い
します。
※ 開発言語は問わないことにしますので質問するときはその辺を踏まえてお願いし
ます。
0412404
NGNG> うぅ、長い上に分かりづらいっぽい…
うん。ぜんぜん分かりません。
が、「フレーム内での遷移をタイトルつきで履歴に格納したい」のだと勝手に解釈して
みる。
BeforeNavigate2でURLとフレームターゲットを記録しておいて、NavigateComplete2
かDocumentComplete2でURLに対応するタイトルをセットすればいいんじゃない?
0414デフォルトの名無しさん
NGNGということはJavaScriptでlocation.hrefとかを使って
メニューのある項目を児童選択 とかはできなさそうですね。
hrefにmenu:1とか放り込めばメニューが出るとこまでは確認したんだけど
その先は無理か・・・
0415デフォルトの名無しさん
NGNGそれって、スキン側でブラウザを操作しようとしてる?
かちゅ〜しゃってスキン使えたっけ。
0416デフォルトの名無しさん
NGNGスキンつかえますよ。かなり自由度あります。
およそHTMLで表現できるものはひととおりOKです。
0417デフォルトの名無しさん
NGNGリンクの上にマウスカーソルを合わせると、バルーン?が出るのは
どうやるのでしょうか?
っていうか、クリーム色のウインドウみたいなやつってバルーンと
いう名前でいいのかな?
0418デフォルトの名無しさん
NGNGWindowsでは「ツールチップ」「ツールヒント」という名称のほうが一般的かと。
表示方法は以下を参照。
http://msdn.microsoft.com/library/?url=/library/en-us/shellcc/platform/commctls/tooltip/reflist.asp?frame=true
開発環境によっては、簡単に使えるためのライブラリ/コンポーネントがあります。
MFC(VC++)ならCToolTipCtrlとか、DelphiならTHintWindowとか。
VBだと…ToolTipTextプロパティを動的に変更、かな?(よくしらない)
表示タイミングについては、「マウスポインタがリンクの上に乗った」ことを何らかの
手段で取得することになるでしょう。
詳細はMSDN Libraryで。
0419403
NGNG>「フレーム内での遷移をタイトルつきで履歴に格納したい」
うん、そうです。たぶん。
でも、むずかしいです。
なかなかIEと同様のモノが作れないです。
もっと色々詳しくなってからじゃないと無理かなぁ…
どっかに良いサンプル無いだろか…
0420デフォルトの名無しさん
NGNG現在表示されているHTMLをクリアして新しい文字列を表示させるには
どうすればよいのでしょうか?
文字列を表示させるのはinnerHTMLでできそうですが、
その前にページをクリアする方法がわかりません。
0421デフォルトの名無しさん
NGNGNavigate("about:blank");
0422デフォルトの名無しさん
NGNG0423デフォルトの名無しさん
NGNGできたのですが、この場合body内しか変更できません。
head内も含めて丸ごと変更するにはどうすればよいのでしょうか?
0424デフォルトの名無しさん
NGNG0425デフォルトの名無しさん
NGNG0426デフォルトの名無しさん
NGNG0427デフォルトの名無しさん
NGNGスタイルシートつかえば?
0428デフォルトの名無しさん
NGNG(;´д⊂ イジワルシナイデオシエテヨ
0429デフォルトの名無しさん
NGNGhttp://tohoho.wakusei.ne.jp/www.htm
おれはここのを参考にしたけど
0430デフォルトの名無しさん
NGNGIE5.5以降ではリソース節約&高速化のために、内部の描画をすべて独自に行って
います(以前はフレーム分割では複数のウィンドウが生成されていたが、今は1つの
ウィンドウで同等の処理が行われる)。
スクロールバーなども標準のコントロールを使わず、IEの独自描画です。
ということで、>>427に1票。
0432デフォルトの名無しさん
NGNGわかりませんか?右下のアイコンをクリックすれば見れるんで
取れると思うんですが。
0433デフォルトの名無しさん
NGNGレジストリをabout:blankで検索するとIEの設定に
C:\WINNT\System32\blank.htm
ってあるけど動的に作っているのか実際には見つからない。
わからないので空のHTMLファイルを表示してお茶を濁してるけど、
これだと普通のページを表示するのと同じだからイベントの処理が必要に
なって面倒だね。
誰かいい方法を教えて。
0434デフォルトの名無しさん
NGNG「戻る」「進む」が有効かどうか調べる方法を教えてください。
「ダイアルアップの接続」はオンラインの状態でネットにアクセスすると自動的に出ますが
接続をキャンセルすると(オフライン状態にすると)以降は出てくれません。
IEだと「オフライン作業」を解除してオンラインにして他のページを表示したり更新すれば
「ダイアルアップの接続」が出ますが CHtmlView だと出ません。
オフラインの切り替えは SetOffline で行っているんですが間違っていますか?
0435デフォルトの名無しさん
NGNG[InetSDK] WebBrowser コントロールでの [進む] と [戻る] ボタンの使い方
http://support.microsoft.com/default.aspx?scid=%2Fisapi%2Fgomscom%2Easp%3Ftarget%3D%2Fjapan%2Fsupport%2Fkb%2Farticles%2Fjp163%2F2%2F82%2Easp&LN=JA
0436デフォルトの名無しさん
NGNG0437デフォルトの名無しさん
NGNG[やりたいこと]
1. MFCアプリでHTMLファイルからHTMLドキュメントオブジェクトを作成。
2. そのオブジェクトにDOMのメソッドで変更を加える。
3. 変更結果をファイルに保存。
で,いくつか方法を試してみたのですがなかなかうまくいきません。
A. HTMLエレメントからIHTMLElement::GetouterHTML()で文字列を取り出して
CFileを使ってがりがり書く。
→モトのHTMLファイルのエンコーディング方法に合わせてエンコードしなくては
いけないので気が遠くなりそう。
B. HTMLドキュメントからIPersistFileを取得してSaveメソッドで保存。
→なぜか変更前の状態で保存される。
C. それならばともうひとつHTMLドキュメントをCoCreateInstanceして
モトからinnerText()で取得した文字列をwrite()で書きこむ。
→書き込み中にスクリプトエラー。onloadでしかスクリプトは呼ばれないはずなのに…。
D. じゃあこれでどうだとwrite()ではなくinsertAdjacentHTML()で
ドキュメントを複製してIPersistFile::Save()。
→insertAdjacentHTML()を呼ぶ前の状態で保存される。
E. ためしにIHTMLDocument2::execCommand( "SaveAs" )で保存。
→MSHTML.DLLからアクセスバイオレーションが飛んでくる。
ブラウザウィンドウが存在しないから?
というわけで万策尽き果てた気分です。どーにかならんでしょうか。
「こういうメソッドはどうよ?」くらいでもいいのでアドバイスもらえると嬉しいっす。
0438デフォルトの名無しさん
NGNGCFileを使ってがりがり書く。
→モトのHTMLファイルのエンコーディング方法に合わせてエンコードしなくては
いけないので気が遠くなりそう。
---
そんなにむつかしい/面倒くさいことか?
0439437
NGNGいざとなったら「何語だろうとUnicodeでしか出力しない!」つって逃げますけど…ちょっとカッコワルイ。
0440デフォルトの名無しさん
NGNGDISPID_AMBIENT_USERMODEでデザインモードに切り替えないと
保存できないような気がするYO;
0441437
NGNGとりあえずやってみよう。
0442437
NGNG440 は神!
しかしちゃんとHTMLドキュメントにアプリをAdviseしたのにIAdviseSink::OnSave()もOnRname()も呼ばれない。
呼ばれないのにIPersistFile::Save()はナニゴトもなく終わっている。
…いいのか?
0443デフォルトの名無しさん
NGNG判定する方法はありますでしょうか?
0444デフォルトの名無しさん
NGNGレジストリのアドレス入力の履歴を調べればいい。と思う。
0445443
NGNGやってみます。
0446デフォルトの名無しさん
NGNGで表示中のHTMLを取得して、
Document.write
で出力というのを繰り返すと、
どんどんHTMLが崩れていくんですが何故でしょうか。
なんかヘッダの中のスタイルシートが消滅したり、へんな位置で改行が入ったり。
0447デフォルトの名無しさん
NGNGinnerだからというオチじゃないよね。
0448デフォルトの名無しさん
NGNGもしかして、sleepとか入れながら、ループでガシガシ追加していますか?
前に、ファイルから少しずつwriteしていったら似たようなことになったことがある。
解決方法は。。。知らない。諦めたから(w
0449デフォルトの名無しさん
NGNG試してないが、
ReadyStateがREADYSTATE_COMPLETEになる前に
Document.writeするとダメとかかも。
0450デフォルトの名無しさん
NGNG0451デフォルトの名無しさん
NGNG0452デフォルトの名無しさん
NGNG変更することは可能でしょうか?
0453デフォルトの名無しさん
NGNG可能だと思う。
0455名無しサンプリング@48kHz
NGNGで新規ウインドウを生成しないようにしたいんですが
どうしたら良いでしょう…(同一ページでリンク先に飛ばせたい)
ちなみに、BCBのTCppWebBrowserコンポーネントです。
ご存知の方がいましたらば情報キボンです!
0456デフォルトの名無しさん
NGNGこんな事やっているやつを発見し、俺と同じくBCB使ってるというから
ソースをダウソしてみたら、BCB6でつくってやんの・・・・・
おれみたいなDQNじゃ、ステップ実行しないとわかないよぉ。
BCB5以下で書かれた、参考になるようなソースどっかにないっすか?
0457デフォルトの名無しさん
NGNGVC++なので、BCBでどうなるかは知らないが、
OnNewWindow2で、新ウィンドウの作成をキャンセルした後、Navigate2する。
か、OnNewWindow2で、IDispatch** argな引数の*argに、thisのIDispatch*を
入れて新ウィンドウの作成はキャンセルする。
0458デフォルトの名無しさん
NGNGBCB だと、OnNewWindow2 で、Cancel はせずに
*ppDisp = CppWebBrowser1->Application;
でいけるはず。
0459445
NGNGレス有難うございます!
で、新規ウインドウの抑止は出来たんですが
canselだと飛び先のURLが取得できません。
*ppDisp = CppWebBrowser1->Application;
では現在の窓でリンク先を表示してくれません…。
>>458さんは飛べてますか?
0460458
NGNGあれー?うちでは飛べるんだけど。BCB 5 と 6 でテスト。
0461名無しサンプリング@48kHz
NGNGBCB5なんですがダメなんですよ…
なんでだ〜
明日BCB6で試してみます!サンクスこ!
0462デフォルトの名無しさん
NGNGだめです。別のWebBrowserを指定すれば飛ぶんですが。
IEのバージョンは関係するのかな。
0463458
NGNGあ、それかもです。うちは IE5.01。
0464デフォルトの名無しさん
NGNG0465デフォルトの名無しさん
NGNGIEのプロクシ設定を取得する方法ってありませんか?
0466デフォルトの名無しさん
NGNGレジストリの
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
0467デフォルトの名無しさん
NGNGサンクスコ
0468465
NGNG0469デフォルトの名無しさん
NGNGobj.CoCreateInstance( L"Shell.Explorer" );
CComQIPtr< IOleClientSite > csite = &implements;
obj->SetClientSite( csite );
obj->QueryInterface( IID_IOleInPlaceObject, (void**)&ipo );
result = obj->DoVerb(OLEIVERB_INPLACEACTIVATE, NULL, csite, 0, g_hwnd, NULL);
CComQIPtr< IWebBrowser2 > ie = obj;
CComBSTR url = "about:blank";
ie->Navigate( url, NULL, NULL, NULL, NULL );
CComPtr< IDispatch > pDisp;
ie->get_Document( &pDisp );
CComQIPtr< IHTMLDocument2 > document = pDisp;
if ( document ) {
CComVariant color( "#000000" );
document->put_bgColor( color );
CComPtr< IHTMLElement > body;
if ( SUCCEEDED (document->get_body( &body ))) {
assert( body ); ※
}
}
上のソースで、どうしても※のところでassertに引っかかるんですが、どうしてなんでしょうか?
戻り値はSUCCEEDEDが返ってきているので、正常なはずなのに、どうしてもbodyが取れません。
0470デフォルトの名無しさん
NGNGというオチ?
0471デフォルトの名無しさん
NGNGこの場合はレンダリングが終わってないか、bodyなんて存在しない
からだと推測。
0472デフォルトの名無しさん
NGNGうぃす、どもです。
Navigate直後だから終わってない&about:blankでドキュメントが存在しないって事ですかね。
DocumentCompleteでやれば出来そうですね。
0473デフォルトの名無しさん
NGNGてことは、470が指摘したのは469のタイプミスだったのか?
まあ、Navigate直後にDocument取得は正気の沙汰じゃないが。
0474デフォルトの名無しさん
NGNGHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Favorites
の構造って既に調べた方います?
ちーともわからなかった。
0475デフォルトの名無しさん
NGNGmtlweb.hあたりにあるから。
0476474
NGNG早速ソースを googleに助けてもらって見てみました。
typedef struct _tagCFavoritesOrderData
{
DWORD size;
DWORD priority;
ITEMIDLIST idl; // relative idlist
} _CFavoritesOrderData;
MtlWeb.hから抜き出してみると上の構造体に
順番に流し込んでるように思えたんですが
{サイズ(4バイト)→順番(4バイト)→データ}→{サイズ(4バイト)→順番(4バイト)→データ}.....
--------------+-------------------|
サイズ
と言う構造と言うことでよろしいんでしょうか?
さらに、この「ITEMLIST」はどういう型なんでしょうか?
C++は勘でしか読めないC#厨なんでごめん
0477デフォルトの名無しさん
NGNG簡単に言うと、 c:\app\dirだと
c: app dir それぞれの要素に分かれて、リスト状に繋がれた物。
0478デフォルトの名無しさん
NGNGフレームの中のcontentWindowにアクセスできる場合とできない場合があるのは
なぜでしょう? バグがあって、document.all からアクセスしないといけないのは
解ったのですが、それでもアクセスできないページがあります。
ところで、モジラのDOMのDLLってあるんでしょうか?
0479デフォルトの名無しさん
NGNG追加です、今はDelphiやVBから触っています。
こんな試行錯誤をVCでやってると氏にますね…
0480デフォルトの名無しさん
NGNGさらに追加。 >>129さんと同じ問題のようです。
どうも未解決っぽいですね。
フレーム間の参照は、セキュリティの関係で
クロススクリプティングを行わせないために
制約がかかっているような気配です。
例外的にドメイン名直下のファイルはやれるようですが、
これが関係しているのかもしれません。
DHTMEditコントロールなども触ってみましたが、
フレームページではエラーが出るようです。
他にWindowsで動くDOMがあったら教えてください。
0481デフォルトの名無しさん
NGNGCross-Frame Navigate でぐぐるといろいろ出てきますな。
確か、MSのページにはっきり制限事項として書かれていたのを
読んだ覚えがあるけど、大分前なのでソースを忘れてしまいますた。
抜け道がないわけではないようだけど、セキュリティ上での制限
つってるくらいだからここに書くのはまずかろうな…
0482デフォルトの名無しさん
NGNGモジラのDOMいれて触ってみました。
VBでオブジェクトをインスペクトして(オブジェクトインスペクタじゃなくて、実行中になかを見て)みたのですが、どうもエラーが出てIEのDOMの用には追えませんでした。
またIDispatchによるアクセスもエラーでした。(オマケでDOMインスペクタなんてものがついてるのだから、DLLを直接触ればやれるのだと思うけど、そっちはまだやってません)
Operaや、NetFrontなんかもDOMにアクセスするインターフェースは用意されてるのかな?
よかったら教えてください。駄目なら、おそらくモジラのLibを直接触るのが早そうです。
0483デフォルトの名無しさん
NGNGHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settingsをい
じればよいことは分かったのですが、mshtml.dllの再読込が必要らしく、その方法が分かりませ
ん。どなたかご存じでないでしょうか?
0484デフォルトの名無しさん
NGNGmozilla関連はこっちでやるべし。
ttp://pc3.2ch.net/test/read.cgi/tech/1023546699/l50
0485デフォルトの名無しさん
NGNGこれ、趣旨が違います。
開発の方針も決まったようですが、あまり深い部分は触らないようです。
0486デフォルトの名無しさん
NGNG0487デフォルトの名無しさん
NGNGライブラリはOutlookのものを使用するらしいのですが。
0488デフォルトの名無しさん
NGNG0489デフォルトの名無しさん
NGNG挙動が変で困ってます。
たとえば
どっかのページにNavigateしてからDocumentCompleteイベントで
IHtmlDocument2 document = (IHtmlDocument2)webbrowser.Document;
foreach(HTMLAnchorElement link in document.links)
{
link.HTMLAnchorEvents2_Event_onclick +=
new mshtml.HTMLAnchorEvents2_onclickEventHandler(OnLinkClick);
}
とし、
private bool OnLinkClick(IHTMLEventObj obj)
{
obj.cancel = true;
DoSomething();
return false;
}
で、リンクのクリックイベントを捕まえて何らかの処理をさせたいんですが、
たまにイベントハンドラが実行されないことがあります。(リンクへ飛んでい
ってしまう)。全く動かないのではなく3回に2回ぐらいはちゃんとDoSomethin
g()が実行されます。原因が全くわからないんですが、どこか変ですかね??
それともComInterOpのバグ??
0490デフォルトの名無しさん
NGNGWinInetのAPIを使うこととは違いますか?
それとも、コンパイラによって具体的な物が変わって
くるのでしょうか?
手元にあるコンパイラはVS6とBCB5なんですが。。。。
おせーて下さいっ!!
0491デフォルトの名無しさん
NGNG0492デフォルトの名無しさん
NGNG0493デフォルトの名無しさん
NGNG米国司法省とかとの和解案の反映の結果?
いずれにせよ、ちと興奮気味に見てます。
0494デフォルトの名無しさん
NGNGhttp://biztech.nikkeibp.co.jp/wcs/leaf/CID/onair/biztech/biz/207451
おお、大手企業はどんどん金を出しつつあるぞ。
どうする?アイフル。
246 :デフォルトの名無しさん :02/09/20 16:42
日本国内でやっている分には問題ないっつってるだろ。
247 :デフォルトの名無しさん :02/09/20 17:17
>>246
インターネットで公開したら世界中が対象範囲だろ
250 :デフォルトの名無しさん :02/09/20 20:47
ブラウザ作って配布すると
gif/jpegの特許であぼんされるってホントですか?
251 :デフォルトの名無しさん :02/09/20 21:03
ホントです。
252 :デフォルトの名無しさん :02/09/20 23:34
>>250
テキストブラウザにしませう
0495デフォルトの名無しさん
NGNGそれでなんですが表示されたページの懸賞などの入力フォームなんかに自動入力させたいのですが
教えてください、お願いします
0496495
NGNG>VB6.0でWebBrowserを使いVBのフォームの中にページを表示させるようにしました。
>それでなんですが表示されたページの懸賞などの入力フォームなんかに自動入力させたいのですが
どのようにすればいいのでしょうか?
>教えてください、お願いします
0497デフォルトの名無しさん
NGNG掲示板荒らしプログラムを作るの?だったらHTTPでPOSTするような
プログラム書いたほうが早いよ。
それとも、本当に懸賞の入力フォームに自動で入力するようなものを
作るの?そんなのサイトによって入力するのが違うから汎用性がないよ。
もしやるとしたら、form.element.valueに入れれば入力されると思うけど。
0498デフォルトの名無しさん
NGNG*** 注意 ***
InternetExplorerのインスタンスを利用するばあい、
UNISYSにLZWの特許の使用許可を得なければならない可能性があります。
しかし、アメリカにおけるマイクロソフトの独占禁止法違反の裁判では、
InternetExplorerは、「ウインドウズの一部ではなく、製品である」と判断されたようです。
インスタンスの利用は、製品の利用であると考えると、特許の使用許可はいらないようにも思えます。
作成したアプリケーションを配布する場合、米国UNSYSにお問い合わせください。
0499デフォルトの名無しさん
NGNGリソースが使用中云々という例外が飛ぶようになり直りません。
原因と対処方法をご存知の方がいればぜひご教示ください。
0500デフォルトの名無しさん
NGNG0501499
NGNG最後にはとうとうWindowsすら立ち上がらなくなりました。(´・ω・`)ショボーン
0502デフォルトの名無しさん
NGNG表示中の文書を一気に消すにはどうしたらいいですか?
Navigate("about:blank"…)
とかしか 方法ないですかね。
0503デフォルトの名無しさん
NGNG0504デフォルトの名無しさん
NGNG> document.open()
IHTMLDocument2.open("text/html", "replace", null, null)
でいいのかな?
とりあえず いいみたいっす。 さんくす。
0505デフォルトの名無しさん
NGNG0506デフォルトの名無しさん
NGNG0507あぃよー
NGNGそこで、IEの”お気に入り”のメニューと同じものを作りたいのですが、
どのようにしてメニューを作ればいいでしょうか?
Win2000とか98とかで、Favoritesの位置が異なるのは
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Favorites
でなんとかなるとは思うのですが。。。
0508デフォルトの名無しさん
NGNG0509デフォルトの名無しさん
NGNGお気に入りフォルダの取得は
SHGetSpecialFolderLocationを使った方が良さそうな気がする。なんとなく。
ファイルの構造はIniFileと同じだから、IniFileとして扱えばUrlを得られるけど、
なんかもっと他の方法が有ったような気がしないでもない。
0510デフォルトの名無しさん
NGNG0511507
NGNG汎用性を重視して、そっちを使ってみます。
INIとして読み込むのも手ですが、その文メニューを開くのにも
アプリを開くのにも時間がかかりますしね・・・。
どうしましょうか・・・
>>510
一応、WebBrowserっていうIEとリンクしているコンポーネントは使っているのですが。。。
”新しいウィンドウで開く”にすると、IEが立ち上がりますし・・・(なんとかしなきゃ・・・)
■ このスレッドは過去ログ倉庫に格納されています