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!

    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
  • Guest Poster
  • Forum
  • Contact Us
Subscribe to Flex BlogSubscribe
  • Examples
Browse > Home / Examples / Control Webpage in HTML Control in AIR

Control Webpage in HTML Control in AIR

15 April 2010

Line Break

Author: Arjan (36 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?

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

Comments

One Response 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?

Get Adobe Flash player

  • Sponsors

  • Popular Tags

    • AdvancedDataGrid
    • AIR
    • ArrayCollection
    • baseColor
    • Button
    • CursorManager
    • DataGrid
    • Dynamic
    • Effects
    • File
    • Flash Builder
    • Flash Builder 4
    • Flashvars
    • Flex 4
    • Framework
    • HSlider
    • Icon
    • Image
    • itemRenderer
    • LinkBar
    • PHP
    • ProgressBar
    • Repeater
    • Style
    • SWIZ
    • Timer
    • Tree
    • Twitter
    • ViewStack
    • VSlider
  • Flex Blog Readers

  • Flex Jobs (from Flex Jobs.org)

    Your Job here? Post your job @ Flex Jobs.org

    Advertisement

  • Recent Posts

    • SWIZ Framework in Flex 4 Example: Part I
    • Dynamic AdvancedDataGridColumn in Flex 4
    • How to make a magnetic button in Flex 4
    • Using ASDoc as an External Tool in Flash Builder 4
    • Flex Encryption (MD5, SHA1, SHA224, SHA256, HMAC)
    • The SWIZ framework for Flex 3 / Flex 4: Easy, Light and Very Powerfull
    • Call Javascript function from Flex / Flash Builder (AS3)
    • Flex FlashVars in AS3 Example
    • Data Dependant Tree Icon with Tree in AdvancedDataGrid with iconFunction
    • WordPress Flash / Flex Comments Form
  • Categories

    • Examples
    • Guest Poster
  • Archives

    • 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

    • List Directory with AIR in Flex 4 5 votes, average: 5.00 out of 55 votes, average: 5.00 out of 55 votes, average: 5.00 out of 55 votes, average: 5.00 out of 55 votes, average: 5.00 out of 5 (5.00 out of 5)
    • Control Webpage in HTML Control in AIR 5 votes, average: 5.00 out of 55 votes, average: 5.00 out of 55 votes, average: 5.00 out of 55 votes, average: 5.00 out of 55 votes, average: 5.00 out of 5 (5.00 out of 5)
    • Data Dependant Tree Icon with Tree in AdvancedDataGrid with iconFunction 5 votes, average: 5.00 out of 55 votes, average: 5.00 out of 55 votes, average: 5.00 out of 55 votes, average: 5.00 out of 55 votes, average: 5.00 out of 5 (5.00 out of 5)
    • Progressbar in Datagrid 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)
    • WordPress Flash / Flex Comments Form 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)