Accessing the objects within an IFrame

Posted on 2009-04-06
Last Modified: 2013-11-23
I need to be able to access the elements in an IFrame to read the values and write them.
I have code to do this within Pages and Frames where I have previously dealt with the All property of the IHTMLDocument(s) which is an IHTMLCollection. The All property of the HTMLIFrame and the IHTMLElement is an IDespatch.

I would welcome any advice dealing with this property, for example what collection type does it actually return? I have checked for IHTMLDocument2 and IHTMLElementCollection and the IFrame doees not appear to support them.

Are there any Gotchas?

How can I get from the IDespatch to the equivalent of the document or HTMLCollection object (if there is one) that one gets from iterating through the enumerator of the OleContainer for a standard Frame.

My current code for dealing with pages and frames and the test code I have written for IFrames is below.

The background to this work is that we write Speech Recognition Software. A lot of ouir users are hospital departments and assiting disabled people to retain their jobs. This means providing workflows which they can drive by voice, filling in our voice activated dialogs by voice and our workflow software then puts the data into the relevant field. A lot of the applications they use are delivered through browsers with the pages generated by 3/4th generation development systems. Quite a lot of these use IFrames.
Our own website uses Joomla as a Content Management System and the Editors for that are delivered in IFrames.

Code now used to find the Frames and the associatied document NewDoc (IHTMLDocument2)

This was from an answer to a previous question and works well.

       if (Supports(CurrDoc, IOleContainer, Container)) and

         (Container.EnumObjects(OLECONTF_EMBEDDINGS, Enumerator) = S_OK)

      then begin

            while Enumerator.Next(1, Unknown, @Fetched) = S_OK do



             if (Supports(Unknown, IWebBrowser2, Browser)) and

                (Supports(Browser.Document, IHTMLDocument2, NewDoc))

Test code trying to find a Document (IHTMLDocument2) interface in the IFrame

    if Supports(CurrItem, HTMLIFrame, fIFrame)

  then begin

        edtTag.Text := 'Got IFrame';

        if Supports(fIFrame, IHTMLFrameBase, fFrameBase)

        then WrkStr := ' +'

        else WrkStr := ' -';

        EdtTag.Text := EdtTag.Text+WrkStr+'FB';     //This is Supported

        if Supports(fIFrame, IHTMLFrameBase2, fFrameBase2)

        then WrkStr := ' +'

        else WrkStr := ' -';

        EdtTag.Text := EdtTag.Text+WrkStr+'FB2';    //This is Supported

        if Supports(fIFrame, IHTMLFrameBase3, fFrameBase3)

        then WrkStr := ' +'

        else WrkStr := ' -';

        EdtTag.Text := EdtTag.Text+WrkStr+'FB3';     //This is Supported

        if (Supports(fIFrame, IHTMLElementCollection, TestColl))

        then WrkStr := ' +'

        else WrkStr := ' -';

        EdtTag.Text := EdtTag.Text+WrkStr+'Col';     //This is not Supported

        if (Supports(fIFrame, IOleContainer, TestCont))

        then WrkStr := ' +'

        else WrkStr := ' -';

        EdtTag.Text := EdtTag.Text+WrkStr+'Cnt';     //This is not Supported

        if (Supports(fIFrame, IHTMLDocument2, TestDoc))

        then WrkStr := ' +'

        else WrkStr := ' -';

        EdtTag.Text := EdtTag.Text+WrkStr+'Doc1';      //This is not Supported

        if (Supports(fIFrame, IWebBrowser2, TestBrowse))

        then WrkStr := ' +'

        else WrkStr := ' -';

        EdtTag.Text := EdtTag.Text+WrkStr+'Brow';    //This is Supported

        if (Supports(TestBrowse, IHTMLDocument2, TestDoc))

        then WrkStr := ' +'

        else WrkStr := ' -';

        EdtTag.Text := EdtTag.Text+WrkStr+'Doc2';


  else edtTag.Text := 'NOT got IFrame';

Open in new window

Question by:GHG-RCH

Accepted Solution

Mechanic_Kharkov earned 500 total points
ID: 24075720

Author Comment

ID: 24078684
Thank you for this reference, it gave me enough to proceed. On this bais I have closed the question, though I have used the second suggested approach and wish to try the first one also.

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
proper way to parse text with delphi 7 99
find a node in VST 2 62
Need Help Delphi 2010 CheckBox1 Stored value in memo 13 55
Objective: - This article will help user in how to convert their numeric value become words. How to use 1. You can copy this code in your Unit as function 2. than you can perform your function by type this code The Code   (CODE) The Im…
Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at
Need to grow your business through quality cloud solutions? With everything required to build a cloud platform and solution, you may feel like the distance between you and the cloud is quite long. Help is here. Spend some time learning about the Con…

947 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now