[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/08/17(Thu) 17:24
投稿者名:IMA
Eメール:
URL :
タイトル:
IEの選択されたフレームを取得したい
IEでフレーム分割されたHPなどで、あるフレームを事前にクリックした後に
印刷プレビューを実行し、「選択されたフレーム」を選択することで事前にクリック
したフレームのみ表示されますが、これと同じようにVBから「選択されたフレーム」
を判断したいのですが、うまく行きません。

例えば文字列が選択されていればそれを頼りに特定できるのですが、単なるクリック
されただけのフレームの判定方法が判りません。
(印刷が目的でなく、そのフレームのdocumentオブジェクトを取得したい)

宜しくお願いします。

投稿時間:2006/08/20(Sun) 10:30
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: IEの選択されたフレームを取得したい
> (印刷が目的でなく、そのフレームのdocumentオブジェクトを取得したい)

回答ではありません。

どなたからもレスがないようなので、documentオブジェクトを取得したい のは解りますが
取得して何をされるのでしょうか?
もう少し詳しい内容や条件が解れば、代替案もあるかと思うのですが?

>例えば文字列が選択されていればそれを頼りに特定できるのですが
だったら、クリックした後に Ctr + A キー を送って選択状態にするとか。

又、逆に表示しているすべてのdocumentを前もって取得しておいて、MouseDown イベントを
取得するとか?

投稿時間:2006/08/20(Sun) 13:46
投稿者名:IMA
Eメール:
URL :
タイトル:
Re^2: IEの選択されたフレームを取得したい
花ちゃんさん、このような掲示板を管理・運営していただき感謝しております。

さて、ご質問に対しコメントさせていただきます。
(ワガママな意見かも知れませんがご容赦を・・)

> documentオブジェクトを取得したい のは解りますが
> 取得して何をされるのでしょうか?
現時点での主たる目的は、IEカスタムツールバー(VB6製:例えばgoogleツールバーの様な物)
のメニューやコマンドボタンから、現在選択されているフレームを特定し、コンテキスト
メニューやブックマークレットの様なことをしたいのです。

> >例えば文字列が選択されていればそれを頼りに特定できるのですが
> だったら、クリックした後に Ctr + A キー を送って選択状態にするとか。
何時、それらのメニューやコマンドボタンを使おうと考えるかは閲覧者のその場面での
考えよるもの(⇒特定はできない)ですから、むやみに全選択や一部選択はしたくありません。

> 又、逆に表示しているすべてのdocumentを前もって取得しておいて、MouseDown イベントを
> 取得するとか?
それも有りかとも思います。しかし、IEで印刷の際に選択されたフレームが有れば、取得できる
ことは、もっと簡単なプロパティーや手法が有るのではないかと思い質問させていただきました。

宜しくお願いします。

投稿時間:2006/09/26(Tue) 16:56
投稿者名:ヤマ@文系
Eメール:
URL :
タイトル:
Re^3: IEの選択されたフレームを取得したい
いつもお世話になっております。

DHTMLに関して調べてみるといいと思います。

下記をちょっと作ってみましたが、
フォーカスがあたっているところは
activeElementとしてエレメントが帰ってるので判別がつきます。
ただし、インラインフレームの場合(または入った場合)はNGが起こるのでもう少し手のこった方法が必要になります。
(確かiframeにアクセスするとエラーになったようなきがします)
(以前書いたソースコードがあると思いますが、若干トリッキーなので省きます)

Dim iDoc As HTMLDocument

Private Sub Command1_Click()
WebBrowser1.Navigate "http://hanatyan.sakura.ne.jp/"'規約によりhを抜いてあります!
End Sub

Private Sub Command2_Click()
Timer1.Enabled = True

End Sub

Private Sub Timer1_Timer()
Dim Element2 As Object
Dim i As Integer

For Each element In iDoc.All.tags("frame")
Set Element2 = iDoc.activeElement

Debug.Print "フォーカス:" & Element2.src
Debug.Print "フレーム" & CStr(i) & ":" & element.src

i = i + 1
Next
End Sub

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Set iDoc = WebBrowser1.Document

End Sub

投稿時間:2006/09/27(Wed) 12:22
投稿者名:IMA
Eメール:
URL :
タイトル:
Re^4: IEの選択されたフレームを取得したい
ヤマ@文系さん

こんな簡単な方法でできるのですね。
DOMは随分チェックしたつもりでしたが、見落として(理解できていない)いたようです。

どうも有り難うございました。

投稿時間:2006/09/27(Wed) 12:37
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: IEの選択されたフレームを取得したい
> こんな簡単な方法でできるのですね。
> DOMは随分チェックしたつもりでしたが、見落として(理解できていない)いたようです。

あれー 前もって取得しておいたのではダメだったのでは。

投稿時間:2006/09/27(Wed) 15:50
投稿者名:IMA
Eメール:
URL :
タイトル:
Re^6: IEの選択されたフレームを取得したい
花ちゃんさん

> あれー 前もって取得しておいたのではダメだったのでは。

どの部分の記載をもとに言っておられるのでしょうか?
ヤマ@文系さんのサンプルは、表示完了後の取得ですが、その後の任意の
時点での取得も可能ですよね?

それとも、何らかの問題が発生するのでしょうか?

追伸:大体はOKですが、JavaScriptでフレームの中に更にフレームを
Document.write した場合に子のフレームが取得できないようです。

もうすこし、調べてみますがアドバイスがあれば宜しくお願いします。

投稿時間:2006/09/27(Wed) 16:57
投稿者名:ヤマ@文系
Eメール:
URL :
タイトル:
Re^7: IEの選択されたフレームを取得したい
> 大体はOKですが、JavaScriptでフレームの中に更にフレームを
> Document.write した場合に子のフレームが取得できないようです。
再帰処理とか考えてみてください。

投稿時間:2006/09/27(Wed) 17:05
投稿者名:IMA
Eメール:
URL :
タイトル:
Re^8: IEの選択されたフレームを取得したい
> > 大体はOKですが、JavaScriptでフレームの中に更にフレームを
> > Document.write した場合に子のフレームが取得できないようです。
> 再帰処理とか考えてみてください。

再帰処理して、その各単一Doc(その中にFrameが無い物)等に対して
Doc.activeElementで取得を試みたのですが、結局最上位の
Doc.activeElementで取得ものと同一のオブジェクトが返ってきています。

なお、通常のフレームの中にフレーム、更にその中にフレームのような
構成でも、最初の最上位のDoc.activeElementで上手く取得できるみたいですが・・

なにか、根本的に勘違いしているのでしょうか?

投稿時間:2006/09/27(Wed) 19:36
投稿者名:ヤマ@文系
Eメール:
URL :
タイトル:
Re^9: IEの選択された...
> Doc.activeElementで取得を試みたのですが、結局最上位の
> Doc.activeElementで取得ものと同一のオブジェクトが返ってきています。
そういう仕様みたいですね・・

> なお、通常のフレームの中にフレーム、更にその中にフレームのような
> 構成でも、最初の最上位のDoc.activeElementで上手く取得できるみたいですが・・
上手くアクティブなフォームは取得できるので問題ないかとおもいますが・・・

javascriptの子フレーム自体は取得できたのでしょうか?
インラインフレームになっていないか確認してください。
そういったページ自体探すのがちょっと面倒なのでやってません・・
すいません。

投稿時間:2006/09/28(Thu) 08:09
投稿者名:IMA
Eメール:
URL :
タイトル:
Re^10: IEの選択...
ヤマ@文系さん、長々お付き合いありがとうございました。

WEBページも色々あり検証が大変ですよね。
IEの印刷プレビューでは、「選択されたフレームのみ印刷する」が正しく
機能しているのにactiveElementではうまく行かない場面があるのが
しゃくの種です。

これからは、かなり限定的な状況ですので自分で検証して参ります。

本件の質問はこれで解決とさせていただきます。
ありがとうございました。

投稿時間:2006/09/29(Fri) 13:18
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
蛇足
> 印刷プレビューを実行し、

ちなみに、IEのアドレスバーに、
    res://C:\WINDOWS\SYSTEM32\SHDOCLC.DLL/preview.dlg
というアドレスを指定すると、そのプレビューのソースが見れたりします。


起動パラメータの渡し方が分かるわけでは無いので、プレビュー画面のソースが見えても、
役には立たないかと思いますが、一応蛇足までに。

投稿時間:2006/09/30(Sat) 15:33
投稿者名:ヤマ@文系
Eメール:
URL :
タイトル:
Re: 蛇足
> 起動パラメータの渡し方が分かるわけでは無いので、プレビュー画面のソースが見えても、
> 役には立たないかと思いますが、一応蛇足までに。
かなり参考になると思いました