This Question is Answered

1 "correct" answer available (4 pts) 2 "helpful" answers available (2 pts)
2 Replies Last post: Dec 31, 2009 3:19 PM by joc007  
joc007   4 posts since
Dec 27, 2009
Currently Being Moderated

Dec 27, 2009 3:46 PM

Access to more than one Popup

Hello,

I know JExplorer provides the getRecentChild()-Method to access the last popup opened by the parent browser. If the parent Browser opens more than one popup, how can I access all popups?

Thanks,

Jochen



Vladimir Ikryanov TeamDev Ltd. 879 posts since
Apr 24, 2006
Currently Being Moderated
1. Dec 28, 2009 12:24 PM in response to: joc007
Re: Access to more than one Popup

Hi Jochen,


JExplorer doesn't provide an appropriate API yet. We will add it in JExplorer 2.4 (January 2010). You can solve this issue right now by listenning opening and closing child windows using the following code:

import com.jniwrapper.win32.ie.Browser;
import com.jniwrapper.win32.ie.WebBrowser;
import com.jniwrapper.win32.ie.event.DisposeEvent;
import com.jniwrapper.win32.ie.event.DisposeListener;
import com.jniwrapper.win32.ie.event.NewWindowEventHandler;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
 
public class CreateChildBrowserSample {
    public static void main(String[] args) throws Exception {
        final Map<Browser, java.util.List<WebBrowser>> browserChildren =
                new HashMap<Browser, java.util.List<WebBrowser>>();
 
        final Browser browser = new Browser();
        browser.navigate("http://www.google.com");
        browserChildren.put(browser, new ArrayList<WebBrowser>());
 
        final NewWindowEventHandler defaultHandler = browser.getNewWindowHandler();
        browser.setNewWindowHandler(new NewWindowEventHandler() {
            public NewWindowAction newWindow() {
                NewWindowAction action = defaultHandler.newWindow();
               
                 final WebBrowser childBrowser = action.getBrowser();
                java.util.List<WebBrowser> children = browserChildren.get(browser);
                if (children != null) {
                    System.out.println("Child added");
                    children.add(childBrowser);
                }
                // add dispose listener to remove child from map
                childBrowser.addDisposeListener(new DisposeListener() {
                    public void browserDisposed(DisposeEvent event) {
                        java.util.List<WebBrowser> children = browserChildren.get(browser);
                        if (children != null) {
                            System.out.println("Child removed");
                            children.remove(event.getBrowser());
                        }
                    }
                });
                return action;
            }
        });
 
        JButton print = new JButton("Print all children");
        print.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                java.util.List<WebBrowser> children = browserChildren.get(browser);
                for (WebBrowser child : children) {
                    System.out.println("child = " + child);
                }
            }
        });
       
         JFrame frame = new JFrame("JExplorer - Child Browser Sample");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(print, BorderLayout.SOUTH);
        frame.getContentPane().add(browser, BorderLayout.CENTER);
        frame.setSize(800, 600);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}
 

Regards,

Vladimir Ikryanov

More Like This

  • Retrieving data ...