<!DOCTYPE html>
<!--

 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you 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.

-->


<html>
  <head>
    <meta name="viewport" content="width=device-width,height=device-height,user-scalable=no,maximum-scale=1.0,initial-scale=1.0" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <title>Cordova Mobile Spec</title>
    <link rel="stylesheet" href="../master.css" type="text/css" media="screen" title="no title" charset="utf-8">
    <script type="text/javascript" charset="utf-8" src="../cordova.js"></script>
    <script type="text/javascript" charset="utf-8" src="../main.js"></script>
    <style>
      iframe, .iframe_container {
        height:100px;
        overflow:scroll;
      }
    </style>
  </head>
  <body onload="init();" id="stage" class="theme">
    <h1>Page2 App</h1>
    <h2>This is page 2 of a Apache Cordova app</h2>
    <div id="info">
        <h4>Platform: <span id="platform">  </span></h4>
        <h4>Version: <span id="version"> </span></h4>
        <h4>UUID: <span id="uuid">  </span></h4>
        <h4>Name: <span id="name"> </span></h4>
        <h4>Width: <span id="width">  </span>,   Height: <span id="height"> 
                   </span>, Color Depth: <span id="colorDepth"></span></h4>
     </div>
     about:blank
     <div class="iframe_container">
       <iframe src="about:blank"></iframe>
     </div>
     invalid URL
     <div class="iframe_container">
       <iframe src="x-ttp://www.invalid.com/"></iframe>
     </div>
     whatheaders.com
     <div class="iframe_container">
       <iframe src="http://whatheaders.com"></iframe>
     </div>
     apache.org
     <div class="iframe_container">
       <iframe src="" id="apacheiframe"></iframe>
     </div>
     <div><button class="backBtn" onclick="backHome();">Back</button></div>
  </body>
  <script>
    setTimeout(function() {
        console.log('loading iframe after timeout.');
        document.querySelector('#apacheiframe').src = 'http://apache.org';
    }, 2000);
  </script>
</html>
