Flex Blog

Search:
  • Home
  • Examples
    • Thumb

      Flex Examples

      Check out our Flex Examples!

    • Thumb

      Flash Builder Examples

      Check out our Flash Builder Examples!

    • Thumb

      AIR Examples

      Check out our AIR Examples!

    • Thumb

      Flex Mobile Examples

      Check out our Flex Mobile Examples!

    Adobe® Flex, Adobe® Flash Builder and Adobe® AIR are registered trademarks of Adobe Systems.
  • Components
    • Thumb

      WP Flex Contact Form

      Check out our WP Flex Contact Form!

    • Thumb

      Flash CountDown Plugin

      Check out our Flash CountDown Plugin!

    This is an overview of all our Flash/Flex based Components.
  • Jobs
  • Flex Books
  • Forum
  • Contact Us
Subscribe to Flex BlogSubscribe
  • Examples
  • iOS
Browse > Home / Examples / Control Webpage in HTML Control in AIR

Control Webpage in HTML Control in AIR

15 April 2010

Line Break

Author: Arjan (47 Articles) - Author Website

Arjan is a SAP Consultant specialized in ABAP and Front End development techniques like Web Dynpro, Adobe Interactive Forms, Flex and AIR. In his free time he likes to create examples for Flex-Blog and other applications using Flex, AIR and PHP. Other hobbies are movies and music. He is also the co-owner of Flex-Blog.com.


One of the additional controls you get from the AIR runtime is the HTML control. The purpose of this control is very straightforward: show webpages or other HTML content, using it for that single purpose is straightforward and easy, but you can do some more advanced stuff to, for example filling in a form and simulating button clicks from actionscript.

For this example I chose to load the google.com website, fill in the query textfield and click the search or gamble button. To do this, first I have to know the name or id of the fields and buttons i want to control. You can use inspect element of either google chrome or firebug in firefox or something similar in any other browser:

Search Name or Id

As you can see, the query field has a name “q” and the buttons has the names “btnG” and “btnI”.

Ok now we can build our AIR app. Lets create a layout first so that we can enter some query, two buttons and the HTML control:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
                       xmlns:s="library://ns.adobe.com/flex/spark"
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       viewSourceURL="srcview/index.html">

    <s:layout>
        <s:VerticalLayout paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5"/>
    </s:layout>

    <s:HGroup verticalAlign="middle">
        <s:Label text="Query:"/>
        <s:TextInput id="query" enter="search(true)" width="200"/>
        <s:Button click="search(true)" label="Search"/>
        <s:Button click="search(false)" label="Gamble!"/>
    </s:HGroup>
    <s:Line width="100%" stroke="{new Stroke(0x000000, 4, 1)}"/>
    <mx:HTML id="html" width="100%" height="100%"/>
       
</s:WindowedApplication>

And the script section that handles everything:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<fx:Script>
    <![CDATA[
        import mx.graphics.Stroke;
       
        // Control Search or Gamle
        private var isSearch:Boolean;
       
       
        private function search(search:Boolean):void{
            // Set isSearch var, to be used in load complete handler
            isSearch = search;
            // Add event listener to the complete event
            html.addEventListener(Event.COMPLETE, fillQueryAndClickButton);
            // Load google.com
            html.htmlLoader.load(new URLRequest("http://www.google.com"));
        }      
   
        private function fillQueryAndClickButton(event:Event):void{
            // Remove event listener
            html.removeEventListener(Event.COMPLETE, fillQueryAndClickButton);
            // Fill query field
            html.htmlLoader.window.document.getElementsByName("q")[0].value = query.text;
            // Execute click on the correct button
            if(isSearch)
            {
                // Execute click on search button
                html.htmlLoader.window.document.getElementsByName("btnG")[0].click();
            }
            else
            {  
                // Execute click on gamble button
                html.htmlLoader.window.document.getElementsByName("btnI")[0].click();
            }
        }
       
    ]]>
</fx:Script>

As you can see, I am using the getElementsByName method to refer to the elements, this is because the elements don’t have an ID on the google page. The getElementsByName returns an array of elements with the name specified, so html.htmlLoader.window.document.getElementsByName(“q”)[0] refers to the first element in that result array.

Instead of referring to elements by name, you can do it by ID if the element id is available in the webpage. getElementById is the method you can use then. This method doesn’t return an array, it returns the element directly because two or more elements can’t have the same ID. Only one result is possible.

Download the sample application here, view source is enabled (Just make sure to right click in the upper part of the application and not in the HTML control (which takes up almost the complete application.)

Here’s the complete source code as well:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
                       xmlns:s="library://ns.adobe.com/flex/spark"
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       viewSourceURL="srcview/index.html">

    <s:layout>
        <s:VerticalLayout paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5"/>
    </s:layout>
   
    <fx:Script>
        <![CDATA[
            import mx.graphics.Stroke;
           
            // Control Search or Gamle
            private var isSearch:Boolean;
           
           
            private function search(search:Boolean):void{
                // Set isSearch var, to be used in load complete handler
                isSearch = search;
                // Add event listener to the complete event
                html.addEventListener(Event.COMPLETE, fillQueryAndClickButton);
                // Load google.com
                html.htmlLoader.load(new URLRequest("http://www.google.com"));
            }      
           
            private function fillQueryAndClickButton(event:Event):void{
                // Remove event listener
                html.removeEventListener(Event.COMPLETE, fillQueryAndClickButton);
                // Fill query field
                html.htmlLoader.window.document.getElementsByName("q")[0].value = query.text;
                // Execute click on the correct button
                if(isSearch)
                {
                    // Execute click on search button
                    html.htmlLoader.window.document.getElementsByName("btnG")[0].click();
                }
                else
                {  
                    // Execute click on gamble button
                    html.htmlLoader.window.document.getElementsByName("btnI")[0].click();
                }
            }
           
        ]]>
    </fx:Script>
   
    <s:HGroup verticalAlign="middle">
        <s:Label text="Query:"/>
        <s:TextInput id="query" enter="search(true)" width="200"/>
        <s:Button click="search(true)" label="Search"/>
        <s:Button click="search(false)" label="Gamble!"/>
    </s:HGroup>
    <s:Line width="100%" stroke="{new Stroke(0x000000, 4, 1)}"/>
    <mx:HTML id="html" width="100%" height="100%"/>
       
</s:WindowedApplication>

No related posts.

Written by Arjan · Filed Under Examples 

Was this post useful to you?

Please rate this post, follow us @ twitter, or link to this page from your website!

1 Star2 Stars3 Stars4 Stars5 Stars (10 votes, average: 4.70 out of 5)
Loading ... Loading ...

08669755d7bd8cddd23a6b5a9b889ec3delicious

Comments

4 Responses to “Control Webpage in HTML Control in AIR”

  1. Saban DEMIRCI on July 12th, 2010 7:22 pm

    Hey! thanx for great tutorial. But how can we get page`s whole html code?

  2. Vasco on March 18th, 2011 2:32 am

    Hi there, im a complete noob to Flex, and all i wanted was an iframe, lets say google to open as soon as you launched the application.
    Is that possible?

    thks in advance.

  3. Roelof on March 18th, 2011 10:23 am

    Hi Vasco,

    It is possible with some external components. For example: http://code.google.com/p/flex-iframe/

    Regards,
    Roelof

  4. Sajain Geevar on March 25th, 2011 9:40 am

    Is it possible to do the same in AIR for mobile devices?

Get Adobe Flash player

  • +1?

  • Support Flex Blog!

  • $ 13 raised
    • 2012/01/13 8:22 PM Russell Brown donated $ 3.00
    • 2011/10/31 4:43 PM Steve Dakin donated $ 5.00
    • 2011/05/11 3:37 PM Roelof Albers donated $ 5.00
  • Stay in touch!

  • Popular Tags

    • AdvancedDataGrid
    • AIR
    • ArrayCollection
    • baseColor
    • Button
    • CursorManager
    • DataGrid
    • Dynamic
    • Effects
    • File
    • FileStream
    • Flash Builder
    • Flash Builder 4
    • Flex 4
    • Flex Mobile
    • Framework
    • Icon
    • Image
    • itemRenderer
    • LinkBar
    • Mobile
    • PHP
    • ProgressBar
    • Repeater
    • Style
    • SWIZ
    • Timer
    • Tree
    • Twitter
    • ViewStack
  • Advertisements

  • Recent Posts

    • Spooky Frenzy – iPad Game
    • Fountain Example
    • Reading & Writing files in Adobe AIR
    • CheckBox in List using MobileIconItemRenderer for Flex Mobile
    • Data Dependent decoratorClass in MobileIconItemRenderer Example
    • Flex 4 Resize Effect Example
    • Jump to next field using the Focus Manager
    • Searching Data using a Class Example
    • Flex Mobile: Two finger tap gesture to toggle actionBar visibility in a View (AIR for Android)
    • TabbedMobileApplication Example in Flex Mobile (AIR for Android)
  • Categories

    • Examples
    • Guest Poster
    • iOS
  • Archives

    • September 2011
    • July 2011
    • May 2011
    • March 2011
    • February 2011
    • November 2010
    • October 2010
    • September 2010
    • August 2010
    • June 2010
    • May 2010
    • April 2010
    • March 2010
    • February 2010
    • January 2010
    • December 2009
    • November 2009
    • October 2009
    • March 2009
    • February 2009
  • Blogroll

    • Adobe Flex Jobs
    • NL for Business
  • Meta

    • Register
    • Log in
    • WordPress
    • XHTML

Copyright © 2010 Flex Blog · AdobeĀ® and AdobeĀ® Flex are registered trademarks of Adobe Systems.

WordPress Adobe Flex Adobe Flash Builder Adobe AIR Creative Commons License

  • Popular Posts

    • Progressbar in Datagrid Example 13 votes, average: 5.00 out of 513 votes, average: 5.00 out of 513 votes, average: 5.00 out of 513 votes, average: 5.00 out of 513 votes, average: 5.00 out of 5 (5.00 out of 5)
    • Data Dependant Tree Icon with Tree in AdvancedDataGrid with iconFunction 8 votes, average: 5.00 out of 58 votes, average: 5.00 out of 58 votes, average: 5.00 out of 58 votes, average: 5.00 out of 58 votes, average: 5.00 out of 5 (5.00 out of 5)
    • List Directory with AIR in Flex 4 7 votes, average: 5.00 out of 57 votes, average: 5.00 out of 57 votes, average: 5.00 out of 57 votes, average: 5.00 out of 57 votes, average: 5.00 out of 5 (5.00 out of 5)
    • Flex FlashVars in AS3 Example 7 votes, average: 5.00 out of 57 votes, average: 5.00 out of 57 votes, average: 5.00 out of 57 votes, average: 5.00 out of 57 votes, average: 5.00 out of 5 (5.00 out of 5)
    • Flex Dynamic Chart Example 4 votes, average: 5.00 out of 54 votes, average: 5.00 out of 54 votes, average: 5.00 out of 54 votes, average: 5.00 out of 54 votes, average: 5.00 out of 5 (5.00 out of 5)