/* * Copyright (c) 2002-2008 Gargoyle Software Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.gargoylesoftware.htmlunit.html; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.Page; import com.gargoylesoftware.htmlunit.SgmlPage; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.WebRequestSettings; import com.gargoylesoftware.htmlunit.WebWindow; import com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine; import com.gargoylesoftware.htmlunit.javascript.PostponedAction; /** * Base class for frame and iframe. * * @version $Revision$ * @author Mike Bowler * @author David K. Taylor * @author Christian Sell * @author Marc Guillemot * @author David D. Kilzer * @author Stefan Anzinger * @author Ahmed Ashour * @author Dmitri Zoubkov * @author Daniel Gredler */ public abstract class BaseFrame extends StyledElement { private final transient Log mainLog_ = LogFactory.getLog(getClass()); private final WebWindow enclosedWindow_ = new FrameWindow(this); /** * Creates an instance of BaseFrame. * * @param namespaceURI the URI that identifies an XML namespace * @param qualifiedName the qualified name of the element type to instantiate * @param page the HtmlPage that contains this element * @param attributes the initial attributes */ protected BaseFrame(final String namespaceURI, final String qualifiedName, final SgmlPage page, final Map attributes) { super(namespaceURI, qualifiedName, page, attributes); try { // put about:blank in the window to allow JS to run on this frame before the // real content is loaded final WebClient webClient = getPage().getEnclosingWindow().getWebClient(); webClient.getPage(enclosedWindow_, new WebRequestSettings(WebClient.URL_ABOUT_BLANK)); } catch (final FailingHttpStatusCodeException e) { // should never occur } catch (final IOException e) { // should never occur } } /** * Called after the node for or