added docs + tests
This commit is contained in:
parent
4e9ad7d5e0
commit
4ddb0aa9b6
434
docs/inappbrowser.md
Normal file
434
docs/inappbrowser.md
Normal file
@ -0,0 +1,434 @@
|
|||||||
|
---
|
||||||
|
license: 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.
|
||||||
|
---
|
||||||
|
|
||||||
|
InAppBrowser
|
||||||
|
============
|
||||||
|
|
||||||
|
> The InAppBrowser is a web-browser that is shown in your app when you use the `window.open` call.
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The object returned from a call to `window.open`.
|
||||||
|
|
||||||
|
Methods
|
||||||
|
----------
|
||||||
|
|
||||||
|
- addEventListener
|
||||||
|
- removeEventListener
|
||||||
|
- close
|
||||||
|
|
||||||
|
Permissions
|
||||||
|
-----------
|
||||||
|
|
||||||
|
### Android
|
||||||
|
|
||||||
|
#### app/res/xml/config.xml
|
||||||
|
|
||||||
|
<plugin name="InAppBrowser" value="org.apache.cordova.InAppBrowser" />
|
||||||
|
|
||||||
|
### iOS
|
||||||
|
|
||||||
|
#### config.xml
|
||||||
|
|
||||||
|
<plugin name="InAppBrowser" value="CDVInAppBrowser" />
|
||||||
|
|
||||||
|
|
||||||
|
### Windows Phone 7 + 8
|
||||||
|
|
||||||
|
#### config.xml
|
||||||
|
|
||||||
|
<plugin name="InAppBrowser" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
addEventListener
|
||||||
|
================
|
||||||
|
|
||||||
|
> Adds a listener for an event from the InAppBrowser.
|
||||||
|
|
||||||
|
ref.addEventListener(eventname, callback);
|
||||||
|
|
||||||
|
- __ref:__ reference to the InAppBrowser window (`InAppBrowser`)
|
||||||
|
- __eventname:__ the event to listen for (`String`)
|
||||||
|
|
||||||
|
loadstart - event fired when the InAppBrowser starts to load a URL
|
||||||
|
loadstop - event fired when the InAppBrowser finished loading a URL
|
||||||
|
loaderror - event fired when the InAppBrowser encounters an error loading a URL
|
||||||
|
exit - event fired when the InAppBrowser window is closed
|
||||||
|
|
||||||
|
- __callback:__ the function that is called when the event is fired.
|
||||||
|
The function is passed an `InAppBrowserEvent` object.
|
||||||
|
|
||||||
|
Supported Platforms
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
- Android
|
||||||
|
- iOS
|
||||||
|
- Windows Phone 7 + 8
|
||||||
|
|
||||||
|
Quick Example
|
||||||
|
-------------
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstart', function() { alert(event.url); });
|
||||||
|
|
||||||
|
Full Example
|
||||||
|
------------
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>InAppBrowser.addEventListener Example</title>
|
||||||
|
|
||||||
|
<script type="text/javascript" charset="utf-8" src="cordova-x.x.x.js"></script>
|
||||||
|
<script type="text/javascript" charset="utf-8">
|
||||||
|
|
||||||
|
// Wait for Cordova to load
|
||||||
|
//
|
||||||
|
document.addEventListener("deviceready", onDeviceReady, false);
|
||||||
|
|
||||||
|
// Cordova is ready
|
||||||
|
//
|
||||||
|
function onDeviceReady() {
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstart', function(event) { alert('start: ' + event.url); });
|
||||||
|
ref.addEventListener('loadstop', function(event) { alert('stop: ' + event.url); });
|
||||||
|
ref.addEventListener('loaderror', function(event) { alert('error: ' + event.message); });
|
||||||
|
ref.addEventListener('exit', function(event) { alert(event.type); });
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
removeEventListener
|
||||||
|
===================
|
||||||
|
|
||||||
|
> Removes a listener for an event from the InAppBrowser.
|
||||||
|
|
||||||
|
ref.removeEventListener(eventname, callback);
|
||||||
|
|
||||||
|
- __ref:__ reference to the InAppBrowser window (`InAppBrowser`)
|
||||||
|
- __eventname:__ the event to stop listening for (`String`)
|
||||||
|
|
||||||
|
loadstart - event fired when the InAppBrowser starts to load a URL
|
||||||
|
loadstop - event fired when the InAppBrowser finished loading a URL
|
||||||
|
loaderror - event fired when the InAppBrowser encounters an error loading a URL
|
||||||
|
exit - event fired when the InAppBrowser window is closed
|
||||||
|
|
||||||
|
- __callback:__ the function that was to be called when the event is fired.
|
||||||
|
The function is passed an `InAppBrowserEvent` object.
|
||||||
|
|
||||||
|
Supported Platforms
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
- Android
|
||||||
|
- iOS
|
||||||
|
- Windows Phone 7 + 8
|
||||||
|
|
||||||
|
Quick Example
|
||||||
|
-------------
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
var myCallback = function() { alert(event.url); }
|
||||||
|
ref.addEventListener('loadstart', myCallback);
|
||||||
|
ref.removeEventListener('loadstart', myCallback);
|
||||||
|
|
||||||
|
Full Example
|
||||||
|
------------
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>InAppBrowser.removeEventListener Example</title>
|
||||||
|
|
||||||
|
<script type="text/javascript" charset="utf-8" src="cordova-x.x.x.js"></script>
|
||||||
|
<script type="text/javascript" charset="utf-8">
|
||||||
|
|
||||||
|
// Wait for Cordova to load
|
||||||
|
//
|
||||||
|
document.addEventListener("deviceready", onDeviceReady, false);
|
||||||
|
|
||||||
|
// Global InAppBrowser reference
|
||||||
|
var iabRef = null;
|
||||||
|
|
||||||
|
function iabLoadStart(event) {
|
||||||
|
alert(event.type + ' - ' + event.url);
|
||||||
|
}
|
||||||
|
|
||||||
|
function iabLoadStop(event) {
|
||||||
|
alert(event.type + ' - ' + event.url);
|
||||||
|
}
|
||||||
|
|
||||||
|
function iabLoadError(event) {
|
||||||
|
alert(event.type + ' - ' + event.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
function iabClose(event) {
|
||||||
|
alert(event.type);
|
||||||
|
iabRef.removeEventListener('loadstart', iabLoadStart);
|
||||||
|
iabRef.removeEventListener('loadstop', iabLoadStop);
|
||||||
|
iabRef.removeEventListener('loaderror', iabLoadError);
|
||||||
|
iabRef.removeEventListener('exit', iabClose);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cordova is ready
|
||||||
|
//
|
||||||
|
function onDeviceReady() {
|
||||||
|
iabRef = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
iabRef.addEventListener('loadstart', iabLoadStart);
|
||||||
|
iabRef.addEventListener('loadstop', iabLoadStop);
|
||||||
|
iabRef.removeEventListener('loaderror', iabLoadError);
|
||||||
|
iabRef.addEventListener('exit', iabClose);
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
close
|
||||||
|
=====
|
||||||
|
|
||||||
|
> Closes the InAppBrowser window.
|
||||||
|
|
||||||
|
ref.close();
|
||||||
|
|
||||||
|
- __ref:__ reference to the InAppBrowser window (`InAppBrowser`)
|
||||||
|
|
||||||
|
Supported Platforms
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
- Android
|
||||||
|
- iOS
|
||||||
|
- Windows Phone 7 + 8
|
||||||
|
- BlackBerry 10
|
||||||
|
|
||||||
|
Quick Example
|
||||||
|
-------------
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.close();
|
||||||
|
|
||||||
|
Full Example
|
||||||
|
------------
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>InAppBrowser.close Example</title>
|
||||||
|
|
||||||
|
<script type="text/javascript" charset="utf-8" src="cordova-x.x.x.js"></script>
|
||||||
|
<script type="text/javascript" charset="utf-8">
|
||||||
|
|
||||||
|
// Wait for Cordova to load
|
||||||
|
//
|
||||||
|
document.addEventListener("deviceready", onDeviceReady, false);
|
||||||
|
|
||||||
|
// Cordova is ready
|
||||||
|
//
|
||||||
|
function onDeviceReady() {
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
// close InAppBrowser after 5 seconds
|
||||||
|
setTimeout(function() {
|
||||||
|
ref.close();
|
||||||
|
}, 5000);
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
executeScript
|
||||||
|
=============
|
||||||
|
|
||||||
|
> Injects JavaScript code into the InAppBrowser window
|
||||||
|
|
||||||
|
ref.executeScript(details, callback);
|
||||||
|
|
||||||
|
- __ref:__ reference to the InAppBrowser window (`InAppBrowser`)
|
||||||
|
- __injectDetails:__ details of the script ot run (`Object`)
|
||||||
|
- Supported keys: (exactly one of "file" or "code" should be present)
|
||||||
|
|
||||||
|
"file" - URL of the script to inject
|
||||||
|
"code" - Text of the script to inject
|
||||||
|
|
||||||
|
- __callback:__ the function that is to be called in the Cordova application after the JavaScript code is injected.
|
||||||
|
- If the injected script is of type "code", then the callback will be called with a single argument, which is
|
||||||
|
the return value of the script, wrapped in an Array. (For multi-line scripts, this is the return value of the
|
||||||
|
last statement, or the last expression evaluated.)
|
||||||
|
|
||||||
|
Supported Platforms
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
- Android
|
||||||
|
- iOS
|
||||||
|
|
||||||
|
Quick Example
|
||||||
|
-------------
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.executeSript({file: "myscript.js"});
|
||||||
|
});
|
||||||
|
|
||||||
|
Full Example
|
||||||
|
------------
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>InAppBrowser.executeScript Example</title>
|
||||||
|
|
||||||
|
<script type="text/javascript" charset="utf-8" src="cordova-2.5.0.js"></script>
|
||||||
|
<script type="text/javascript" charset="utf-8">
|
||||||
|
|
||||||
|
// Wait for Cordova to load
|
||||||
|
//
|
||||||
|
document.addEventListener("deviceready", onDeviceReady, false);
|
||||||
|
|
||||||
|
// Global InAppBrowser reference
|
||||||
|
var iabRef = null;
|
||||||
|
|
||||||
|
// Inject our custom JavaScript into the InAppBrowser window
|
||||||
|
//
|
||||||
|
function replaceHeaderImage() {
|
||||||
|
iabRef.executeScript({
|
||||||
|
code: "var img=document.querySelector('#header img'); img.src='http://cordova.apache.org/images/cordova_bot.png';"
|
||||||
|
}, function() {
|
||||||
|
alert("Image Element Successfully Hijacked");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function iabClose(event) {
|
||||||
|
iabRef.removeEventListener('loadstop', replaceHeaderImage);
|
||||||
|
iabRef.removeEventListener('exit', iabClose);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cordova is ready
|
||||||
|
//
|
||||||
|
function onDeviceReady() {
|
||||||
|
iabRef = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
iabRef.addEventListener('loadstop', replaceHeaderImage);
|
||||||
|
iabRef.addEventListener('exit', iabClose);
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
insertCSS
|
||||||
|
=========
|
||||||
|
|
||||||
|
> Injects CSS into the InAppBrowser window
|
||||||
|
|
||||||
|
ref.insertCSS(details, callback);
|
||||||
|
|
||||||
|
- __ref:__ reference to the InAppBrowser window (`InAppBrowser`)
|
||||||
|
- __injectDetails:__ details of the script ot run (`Object`)
|
||||||
|
- Supported keys: (exactly one of "file" or "code" should be present)
|
||||||
|
|
||||||
|
"file" - URL of the stylesheet to inject
|
||||||
|
"code" - Text of the stylesheet to inject
|
||||||
|
|
||||||
|
- __callback:__ the function that is to be called in the Cordova application after the CSS is injected.
|
||||||
|
|
||||||
|
Supported Platforms
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
- Android
|
||||||
|
- iOS
|
||||||
|
|
||||||
|
Quick Example
|
||||||
|
-------------
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.insertCSS({file: "mystyles.css"});
|
||||||
|
});
|
||||||
|
|
||||||
|
Full Example
|
||||||
|
------------
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>InAppBrowser.executeScript Example</title>
|
||||||
|
|
||||||
|
<script type="text/javascript" charset="utf-8" src="cordova-2.5.0.js"></script>
|
||||||
|
<script type="text/javascript" charset="utf-8">
|
||||||
|
|
||||||
|
// Wait for Cordova to load
|
||||||
|
//
|
||||||
|
document.addEventListener("deviceready", onDeviceReady, false);
|
||||||
|
|
||||||
|
// Global InAppBrowser reference
|
||||||
|
var iabRef = null;
|
||||||
|
|
||||||
|
// Inject our custom CSS into the InAppBrowser window
|
||||||
|
//
|
||||||
|
function changeBackgroundColor() {
|
||||||
|
iabRef.executeScript({
|
||||||
|
code: "body { background: #ffff00"
|
||||||
|
}, function() {
|
||||||
|
alert("Styles Altered");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function iabClose(event) {
|
||||||
|
iabRef.removeEventListener('loadstop', changeBackgroundColor);
|
||||||
|
iabRef.removeEventListener('exit', iabClose);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cordova is ready
|
||||||
|
//
|
||||||
|
function onDeviceReady() {
|
||||||
|
iabRef = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
iabRef.addEventListener('loadstop', changeBackgroundColor);
|
||||||
|
iabRef.addEventListener('exit', iabClose);
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
InAppBrowserEvent
|
||||||
|
=================
|
||||||
|
|
||||||
|
The object that is passed to the callback function from an addEventListener call on an InAppBrowser object.
|
||||||
|
|
||||||
|
Properties
|
||||||
|
----------
|
||||||
|
|
||||||
|
- __type:__ the eventname (`String`) - one of loadstart, loadstop, loaderror or exit
|
||||||
|
- __url:__ the URL that was loaded (`String`)
|
||||||
|
- __code:__ the error code (`Number`) - only in the case of loaderror
|
||||||
|
- __message:__ the error message (`String`) - only in the case of loaderror
|
95
docs/window.open.md
Normal file
95
docs/window.open.md
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
---
|
||||||
|
license: 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.
|
||||||
|
---
|
||||||
|
|
||||||
|
window.open
|
||||||
|
===========
|
||||||
|
|
||||||
|
Opens a URL in a new InAppBrowser instance, the current browser instance, or the system browser.
|
||||||
|
|
||||||
|
var ref = window.open(url, target, options);
|
||||||
|
|
||||||
|
- __ref:__ reference to the InAppBrowser window (`InAppBrowser`)
|
||||||
|
- __url:__ the URL to load (`String`). Call encodeURI() on this if you have Unicode characters in your URL.
|
||||||
|
- __target:__ the target to load the URL in (`String`) (Optional, Default: "_self")
|
||||||
|
|
||||||
|
_self - opens in the Cordova WebView if url is in the white-list, else it opens in the InAppBrowser
|
||||||
|
_blank - always open in the InAppBrowser
|
||||||
|
_system - always open in the system web browser
|
||||||
|
|
||||||
|
|
||||||
|
- __options:__ options for the InAppBrowser (`String`) (Optional, Default: "location=yes")
|
||||||
|
|
||||||
|
The options string must not contain any blank space, each feature name and value must be separated by a comma. Feature names are case insensitive. Only the value below is supported on all platforms:
|
||||||
|
|
||||||
|
- __location__ - set to 'yes' or 'no' to turn the location bar on or off for the InAppBrowser
|
||||||
|
|
||||||
|
iOS only
|
||||||
|
--------
|
||||||
|
- __enableViewportScale__ - set to 'yes' or 'no' to prevent viewport scaling through a meta tag (defaults to 'no')
|
||||||
|
- __mediaPlaybackRequiresUserAction__ - set to 'yes' or 'no' to not allow autoplayed HTML5 video (defaults to 'no')
|
||||||
|
- __allowInlineMediaPlayback__ - set to 'yes' or 'no' to allow inline HTML5 media playback, also, the video element in the HTML document must also include the webkit-playsinline attribute (defaults to 'no')
|
||||||
|
- __keyboardDisplayRequiresUserAction__ - set to 'yes' or 'no' to open the keyboard when form elements get focus via the JavaScript focus() call (defaults to 'yes')
|
||||||
|
- __suppressesIncrementalRendering__ - set to 'yes' or 'no' to wait until all new view content has been received before it is rendered (defaults to 'no')
|
||||||
|
- __presentationstyle__ - set to 'pagesheet', 'formsheet' or 'fullscreen' to set the [presentation style](http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalPresentationStyle) (defaults to 'fullscreen')
|
||||||
|
- __transitionstyle__ - set to 'fliphorizontal', 'crossdissolve' or 'coververtical' to set the [transition style](http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalTransitionStyle) (defaults to 'coververtical')
|
||||||
|
|
||||||
|
Supported Platforms
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
- Android
|
||||||
|
- iOS
|
||||||
|
- BlackBerry 10
|
||||||
|
- Windows Phone 7 + 8
|
||||||
|
|
||||||
|
Quick Example
|
||||||
|
-------------
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
var ref2 = window.open(encodeURI('http://ja.m.wikipedia.org/wiki/ハングル'), '_blank', 'location=yes');
|
||||||
|
|
||||||
|
Full Example
|
||||||
|
------------
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>window.open Example</title>
|
||||||
|
|
||||||
|
<script type="text/javascript" charset="utf-8" src="cordova-x.x.x.js"></script>
|
||||||
|
<script type="text/javascript" charset="utf-8">
|
||||||
|
|
||||||
|
// Wait for Cordova to load
|
||||||
|
//
|
||||||
|
document.addEventListener("deviceready", onDeviceReady, false);
|
||||||
|
|
||||||
|
// Cordova is ready
|
||||||
|
//
|
||||||
|
function onDeviceReady() {
|
||||||
|
// external url
|
||||||
|
var ref = window.open(encodeURI('http://apache.org'), '_blank', 'location=yes');
|
||||||
|
// relative document
|
||||||
|
ref = window.open('next.html', '_self');
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
BIN
test/.DS_Store
vendored
Normal file
BIN
test/.DS_Store
vendored
Normal file
Binary file not shown.
70
test/cordova-incl.js
vendored
Normal file
70
test/cordova-incl.js
vendored
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
var PLAT;
|
||||||
|
if (/Android/.exec(navigator.userAgent)) {
|
||||||
|
PLAT = 'android';
|
||||||
|
} else if (/(iPad)|(iPhone)|(iPod)/.exec(navigator.userAgent)) {
|
||||||
|
PLAT = 'ios';
|
||||||
|
} else if (/(BB10)|(PlayBook)|(BlackBerry)/.exec(navigator.userAgent)) {
|
||||||
|
PLAT = 'blackberry';
|
||||||
|
}
|
||||||
|
|
||||||
|
var scripts = document.getElementsByTagName('script');
|
||||||
|
var currentPath = scripts[scripts.length - 1].src;
|
||||||
|
var platformCordovaPath = currentPath.replace("cordova-incl.js", "cordova." + PLAT + ".js");
|
||||||
|
var normalCordovaPath = currentPath.replace("cordova-incl.js", "cordova.js");
|
||||||
|
var cordovaPath = normalCordovaPath;
|
||||||
|
|
||||||
|
if (PLAT) {
|
||||||
|
// XHR to local file is an error on some platforms, windowsphone for one
|
||||||
|
try {
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
xhr.open("GET", platformCordovaPath, false);
|
||||||
|
xhr.onreadystatechange = function() {
|
||||||
|
|
||||||
|
if (this.readyState == this.DONE && this.responseText.length > 0) {
|
||||||
|
if(parseInt(this.status) >= 400){
|
||||||
|
cordovaPath = normalCordovaPath;
|
||||||
|
}else{
|
||||||
|
cordovaPath = platformCordovaPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
xhr.send(null);
|
||||||
|
}
|
||||||
|
catch(e){
|
||||||
|
cordovaPath = normalCordovaPath;
|
||||||
|
} // access denied!
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!window._doNotWriteCordovaScript) {
|
||||||
|
document.write('<script type="text/javascript" charset="utf-8" src="' + cordovaPath + '"></script>');
|
||||||
|
}
|
||||||
|
|
||||||
|
function backHome() {
|
||||||
|
if (window.device && device.platform && device.platform.toLowerCase() == 'android') {
|
||||||
|
navigator.app.backHistory();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
window.history.go(-1);
|
||||||
|
}
|
||||||
|
}
|
230
test/inappbrowser/index.html
Normal file
230
test/inappbrowser/index.html
Normal file
@ -0,0 +1,230 @@
|
|||||||
|
<!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"> <!-- ISO-8859-1 -->
|
||||||
|
<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-incl.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" charset="utf-8">
|
||||||
|
|
||||||
|
var deviceReady = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function called when page has finished loading.
|
||||||
|
*/
|
||||||
|
function init() {
|
||||||
|
document.addEventListener("deviceready", function() {
|
||||||
|
deviceReady = true;
|
||||||
|
console.log("Device="+device.platform+" "+device.version);
|
||||||
|
}, false);
|
||||||
|
function updateUserAgent() {
|
||||||
|
document.getElementById("user-agent").textContent = navigator.userAgent;
|
||||||
|
}
|
||||||
|
updateUserAgent();
|
||||||
|
window.setInterval(updateUserAgent, 1500);
|
||||||
|
window.setTimeout(function() {
|
||||||
|
if (!deviceReady) {
|
||||||
|
alert("Error: Apache Cordova did not initialize. Demo will not run correctly.");
|
||||||
|
}
|
||||||
|
},1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
function doOpen(url, target, params, numExpectedRedirects) {
|
||||||
|
numExpectedRedirects = numExpectedRedirects || 0;
|
||||||
|
var iab = window.open(url, target, params);
|
||||||
|
if (!iab) {
|
||||||
|
alert('window.open returned ' + iab);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var counts;
|
||||||
|
var lastLoadStartURL;
|
||||||
|
var wasReset = false;
|
||||||
|
function reset() {
|
||||||
|
counts = {
|
||||||
|
'loaderror': 0,
|
||||||
|
'loadstart': 0,
|
||||||
|
'loadstop': 0,
|
||||||
|
'exit': 0
|
||||||
|
};
|
||||||
|
lastLoadStartURL = '';
|
||||||
|
}
|
||||||
|
reset();
|
||||||
|
|
||||||
|
function logEvent(e) {
|
||||||
|
console.log('IAB event=' + JSON.stringify(e));
|
||||||
|
counts[e.type]++;
|
||||||
|
// Verify that event.url gets updated on redirects.
|
||||||
|
if (e.type == 'loadstart') {
|
||||||
|
if (e.url == lastLoadStartURL) {
|
||||||
|
alert('Unexpected: loadstart fired multiple times for the same URL.');
|
||||||
|
}
|
||||||
|
lastLoadStartURL = e.url;
|
||||||
|
}
|
||||||
|
// Verify the right number of loadstart events were fired.
|
||||||
|
if (e.type == 'loadstop' || e.type == 'loaderror') {
|
||||||
|
if (e.url != lastLoadStartURL) {
|
||||||
|
alert('Unexpected: ' + e.type + ' event.url != loadstart\'s event.url');
|
||||||
|
}
|
||||||
|
if (numExpectedRedirects === 0 && counts['loadstart'] !== 1) {
|
||||||
|
// Do allow a loaderror without a loadstart (e.g. in the case of an invalid URL).
|
||||||
|
if (!(e.type == 'loaderror' && counts['loadstart'] === 0)) {
|
||||||
|
alert('Unexpected: got multiple loadstart events. (' + counts['loadstart'] + ')');
|
||||||
|
}
|
||||||
|
} else if (numExpectedRedirects > 0 && counts['loadstart'] < (numExpectedRedirects+1)) {
|
||||||
|
alert('Unexpected: should have got at least ' + (numExpectedRedirects+1) + ' loadstart events, but got ' + counts['loadstart']);
|
||||||
|
}
|
||||||
|
wasReset = true;
|
||||||
|
numExpectedRedirects = 0;
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
// Verify that loadend / loaderror was called.
|
||||||
|
if (e.type == 'exit') {
|
||||||
|
var numStopEvents = counts['loadstop'] + counts['loaderror'];
|
||||||
|
if (numStopEvents === 0 && !wasReset) {
|
||||||
|
alert('Unexpected: browser closed without a loadstop or loaderror.')
|
||||||
|
} else if (numStopEvents > 1) {
|
||||||
|
alert('Unexpected: got multiple loadstop/loaderror events.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
iab.addEventListener('loaderror', logEvent, false);
|
||||||
|
iab.addEventListener('loadstart', logEvent, false);
|
||||||
|
iab.addEventListener('loadstop', logEvent, false);
|
||||||
|
iab.addEventListener('exit', logEvent, false);
|
||||||
|
|
||||||
|
return iab;
|
||||||
|
}
|
||||||
|
|
||||||
|
function openWithStyle(url, cssUrl, useCallback) {
|
||||||
|
var iab = doOpen(url, '_blank', 'location=yes');
|
||||||
|
var callback = function(results) {
|
||||||
|
if (results && results.length === 0) {
|
||||||
|
alert('Results verified');
|
||||||
|
} else {
|
||||||
|
console.log(results);
|
||||||
|
alert('Got: ' + typeof(results) + '\n' + JSON.stringify(results));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if (cssUrl) {
|
||||||
|
iab.addEventListener('loadstop', function(event) {
|
||||||
|
iab.insertCSS({file: cssUrl}, useCallback && callback);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
iab.addEventListener('loadstop', function(event) {
|
||||||
|
iab.insertCSS({code:'#style-update-literal { \ndisplay: block !important; \n}'},
|
||||||
|
useCallback && callback);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function openWithScript(url, jsUrl, useCallback) {
|
||||||
|
var iab = doOpen(url, '_blank', 'location=yes');
|
||||||
|
if (jsUrl) {
|
||||||
|
iab.addEventListener('loadstop', function(event) {
|
||||||
|
iab.executeScript({file: jsUrl}, useCallback && function(results) {
|
||||||
|
if (results && results.length === 0) {
|
||||||
|
alert('Results verified');
|
||||||
|
} else {
|
||||||
|
console.log(results);
|
||||||
|
alert('Got: ' + typeof(results) + '\n' + JSON.stringify(results));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
iab.addEventListener('loadstop', function(event) {
|
||||||
|
var code = '(function(){\n' +
|
||||||
|
' var header = document.getElementById("header");\n' +
|
||||||
|
' header.innerHTML = "Script literal successfully injected";\n' +
|
||||||
|
' return "abc";\n' +
|
||||||
|
'})()';
|
||||||
|
iab.executeScript({code:code}, useCallback && function(results) {
|
||||||
|
if (results && results.length === 1 && results[0] === 'abc') {
|
||||||
|
alert('Results verified');
|
||||||
|
} else {
|
||||||
|
console.log(results);
|
||||||
|
alert('Got: ' + typeof(results) + '\n' + JSON.stringify(results));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body onload="init();" id="stage" class="theme">
|
||||||
|
|
||||||
|
<h1>InAppBrowser</h1>
|
||||||
|
<div id="info">
|
||||||
|
Make sure http://www.google.com is white listed. </br>
|
||||||
|
Make sure http://www.apple.com is not in the white list.</br> In iOS, starred <span style="vertical-align:super">*</span> tests will leave the app with no way to return. </br>
|
||||||
|
<h4>User-Agent: <span id="user-agent"> </span></h4>
|
||||||
|
</div>
|
||||||
|
<div onclick="backHome();">Back</div>
|
||||||
|
<h1>Local URL</h1>
|
||||||
|
<div class="btn large" onclick="doOpen('local.html');">Default: CordovaWebView</div>
|
||||||
|
<div class="btn large" onclick="doOpen('local.html', '_self');">Target=Self: CordovaWebView</div>
|
||||||
|
<div class="btn large" onclick="doOpen('local.html', '_system');">Target=System: Error</div>
|
||||||
|
<div class="btn large" onclick="doOpen('local.html', '_blank');">Target=Blank: InAppBrowser</div>
|
||||||
|
<div class="btn large" onclick="doOpen('local.html', 'random_string');">Target=Random: InAppBrowser</div>
|
||||||
|
<div class="btn large" onclick="doOpen('local.html', 'random_string', 'location=no');">Target=Random, no location bar: InAppBrowser</div>
|
||||||
|
<h1>White Listed URL</h1>
|
||||||
|
<div class="btn large" onclick="doOpen('http://www.google.com');">Default: CordovaWebView<span style="vertical-align:super">*</span></div>
|
||||||
|
<div class="btn large" onclick="doOpen('http://www.google.com', '_self');">Target=Self: CordovaWebView<span style="vertical-align:super">*</span></div>
|
||||||
|
<div class="btn large" onclick="doOpen('http://www.google.com', '_system');">Target=System: System Browser</div>
|
||||||
|
<div class="btn large" onclick="doOpen('http://www.google.com', '_blank');">Target=Blank: InAppBrowser</div>
|
||||||
|
<div class="btn large" onclick="doOpen('http://www.google.com', 'random_string');">Target=Random: InAppBrowser</div>
|
||||||
|
<div class="btn large" onclick="doOpen('http://www.google.com', 'random_string', 'location=no');">Target=Random, no location bar: InAppBrowser</div>
|
||||||
|
<h1>Non White Listed URL</h1>
|
||||||
|
<div class="btn large" onclick="doOpen('http://www.apple.com');">Default: InAppBrowser</div>
|
||||||
|
<div class="btn large" onclick="doOpen('http://www.apple.com', '_self');">Target=Self: InAppBrowser</div>
|
||||||
|
<div class="btn large" onclick="doOpen('http://www.apple.com', '_system');">Target=System: System</div>
|
||||||
|
<div class="btn large" onclick="doOpen('http://www.apple.com', '_blank');">Target=Blank: InAppBrowser</div>
|
||||||
|
<div class="btn large" onclick="doOpen('http://www.apple.com', 'random_string');">Target=Random: InAppBrowser</div>
|
||||||
|
<div class="btn large" onclick="doOpen('http://www.apple.com', 'random_string', 'location=no');">Target=Random, no location bar: InAppBrowser</div>
|
||||||
|
<h1>Page with redirect</h1>
|
||||||
|
<div class="btn large" onclick="doOpen('http://google.com', 'random_string', '', 1);">http://google.com (should 301)</div>
|
||||||
|
<div class="btn large" onclick="doOpen('http://goo.gl/pUFqg', 'random_string', '', 2);">http://www.zhihu.com/answer/16714076 (should 302)</div>
|
||||||
|
<h1>PDF URL</h1>
|
||||||
|
<div class="btn large" onclick="doOpen('http://www.stluciadance.com/prospectus_file/sample.pdf');">Remote URL</div>
|
||||||
|
<div class="btn large" onclick="doOpen('local.pdf', '_blank');">Local URL</div>
|
||||||
|
<h1>INVALID URL</h1>
|
||||||
|
<div class="btn large" onclick="doOpen('x-ttp://www.invalid.com/', '_blank');">Invalid Scheme</div>
|
||||||
|
<div class="btn large" onclick="doOpen('http://www.inv;alid.com/', '_blank');">Invalid Host</div>
|
||||||
|
<div class="btn large" onclick="doOpen('nonexistent.html', '_blank');">Missing File</div>
|
||||||
|
<h1>CSS / JS Injection</h1>
|
||||||
|
<div class="btn large" onclick="doOpen('inject.html', '_blank');">Original Document</div>
|
||||||
|
<div class="btn large" onclick="openWithStyle('inject.html','inject.css');">CSS File Injection</div>
|
||||||
|
<div class="btn large" onclick="openWithStyle('inject.html','inject.css', true);">CSS File Injection (CB)</div>
|
||||||
|
<div class="btn large" onclick="openWithStyle('inject.html');">CSS Literal Injection</div>
|
||||||
|
<div class="btn large" onclick="openWithStyle('inject.html', null, true);">CSS Literal Injection (CB)</div>
|
||||||
|
<div class="btn large" onclick="openWithScript('inject.html', 'inject.js');">Script File Injection</div>
|
||||||
|
<div class="btn large" onclick="openWithScript('inject.html', 'inject.js', true);">Script File Injection (CB)</div>
|
||||||
|
<div class="btn large" onclick="openWithScript('inject.html');">Script Literal Injection</div>
|
||||||
|
<div class="btn large" onclick="openWithScript('inject.html', null, true);">Script Literal Injection (CB)</div>
|
||||||
|
<h2> </h2><div class="backBtn" onclick="backHome();">Back</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
3
test/inappbrowser/inject.css
Normal file
3
test/inappbrowser/inject.css
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#style-update-file {
|
||||||
|
display: block !important;
|
||||||
|
}
|
43
test/inappbrowser/inject.html
Normal file
43
test/inappbrowser/inject.html
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<!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"> <!-- ISO-8859-1 -->
|
||||||
|
<title>Cordova Mobile Spec</title>
|
||||||
|
<link rel="stylesheet" href="../master.css" type="text/css" media="screen" title="no title" charset="utf-8">
|
||||||
|
</head>
|
||||||
|
<body id="stage" class="theme">
|
||||||
|
<h1 id="header">InAppBrowser - Script / Style Injection Test</h1>
|
||||||
|
<h2 id="style-update-file" style="display:none">Style updated from file</h2>
|
||||||
|
<h2 id="style-update-literal" style="display:none">Style updated from literal</h2>
|
||||||
|
</body>
|
||||||
|
<script>
|
||||||
|
function updateUserAgent() {
|
||||||
|
document.getElementById("u-a").textContent = navigator.userAgent;
|
||||||
|
}
|
||||||
|
updateUserAgent();
|
||||||
|
window.setInterval(updateUserAgent, 1500);
|
||||||
|
</script>
|
||||||
|
</html>
|
2
test/inappbrowser/inject.js
Normal file
2
test/inappbrowser/inject.js
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
var d = document.getElementById("header")
|
||||||
|
d.innerHTML = "Script file successfully injected";
|
51
test/inappbrowser/local.html
Normal file
51
test/inappbrowser/local.html
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
<!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"> <!-- ISO-8859-1 -->
|
||||||
|
<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-incl.js"></script>
|
||||||
|
</head>
|
||||||
|
<body id="stage" class="theme">
|
||||||
|
<h1>InAppBrowser - Local URL</h1>
|
||||||
|
<div id="info">
|
||||||
|
You have successfully loaded a local URL
|
||||||
|
</div>
|
||||||
|
<div>User-Agent = <span id="u-a"></span></div>
|
||||||
|
<div><a href="http://www.google.com">Visit Google</a></div>
|
||||||
|
<div><a href="http://www.yahoo.com">Visit Yahoo</a></div>
|
||||||
|
<div><a href="http://www.stluciadance.com/prospectus_file/sample.pdf">Check out my remote PDF</a></div>
|
||||||
|
<div><a href="local.pdf">Check out my local PDF</a></div>
|
||||||
|
<h2> </h2><div class="backBtn" onclick="backHome();">Back</div>
|
||||||
|
</body>
|
||||||
|
<script>
|
||||||
|
function updateUserAgent() {
|
||||||
|
document.getElementById("u-a").textContent = navigator.userAgent;
|
||||||
|
}
|
||||||
|
updateUserAgent();
|
||||||
|
window.setInterval(updateUserAgent, 1500);
|
||||||
|
</script>
|
||||||
|
</html>
|
BIN
test/inappbrowser/local.pdf
Normal file
BIN
test/inappbrowser/local.pdf
Normal file
Binary file not shown.
65
test/index.html
Normal file
65
test/index.html
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
<!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,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-incl.js"></script>
|
||||||
|
<script type="text/javascript" charset="utf-8" src="main.js"></script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body onload="init();" id="stage" class="theme">
|
||||||
|
<h1>Apache Cordova Tests</h1>
|
||||||
|
<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>Model: <span id="model"> </span></h4>
|
||||||
|
<h4>Width: <span id="width"> </span>, Height: <span id="height">
|
||||||
|
</span>, Color Depth: <span id="colorDepth"></span></h4>
|
||||||
|
<h4>User-Agent: <span id="user-agent"> </span></h4>
|
||||||
|
</div>
|
||||||
|
<a href="autotest/index.html" class="btn large">Automatic Test</a>
|
||||||
|
<a href="accelerometer/index.html" class="btn large">Accelerometer</a>
|
||||||
|
<a href="audio/index.html" class="btn large">Audio Play/Record</a>
|
||||||
|
<a href="battery/index.html" class="btn large">Battery</a>
|
||||||
|
<a href="camera/index.html" class="btn large">Camera</a>
|
||||||
|
<a href="compass/index.html" class="btn large">Compass</a>
|
||||||
|
<a href="contacts/index.html" class="btn large">Contacts</a>
|
||||||
|
<a href="events/index.html" class="btn large">Events</a>
|
||||||
|
<a href="location/index.html" class="btn large">Location</a>
|
||||||
|
<a href="lazyloadjs/index.html" class="btn large">Lazy Loading of cordova-incl.js</a>
|
||||||
|
<a href="misc/index.html" class="btn large">Misc Content</a>
|
||||||
|
<a href="network/index.html" class="btn large">Network</a>
|
||||||
|
<a href="notification/index.html" class="btn large">Notification</a>
|
||||||
|
<a href="splashscreen/index.html" class="btn large">Splashscreen</a>
|
||||||
|
<a href="sql/index.html" class="btn large">Web SQL</a>
|
||||||
|
<a href="storage/index.html" class="btn large">Local Storage</a>
|
||||||
|
<a href="benchmarks/index.html" class="btn large">Benchmarks</a>
|
||||||
|
<a href="inappbrowser/index.html" class="btn large">In App Browser</a>
|
||||||
|
</body>
|
||||||
|
</html>
|
163
test/main.js
Normal file
163
test/main.js
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
var deviceInfo = function() {
|
||||||
|
document.getElementById("platform").innerHTML = device.platform;
|
||||||
|
document.getElementById("version").innerHTML = device.version;
|
||||||
|
document.getElementById("uuid").innerHTML = device.uuid;
|
||||||
|
document.getElementById("name").innerHTML = device.name;
|
||||||
|
document.getElementById("model").innerHTML = device.model;
|
||||||
|
document.getElementById("width").innerHTML = screen.width;
|
||||||
|
document.getElementById("height").innerHTML = screen.height;
|
||||||
|
document.getElementById("colorDepth").innerHTML = screen.colorDepth;
|
||||||
|
};
|
||||||
|
|
||||||
|
var getLocation = function() {
|
||||||
|
var suc = function(p) {
|
||||||
|
alert(p.coords.latitude + " " + p.coords.longitude);
|
||||||
|
};
|
||||||
|
var locFail = function() {
|
||||||
|
};
|
||||||
|
navigator.geolocation.getCurrentPosition(suc, locFail);
|
||||||
|
};
|
||||||
|
|
||||||
|
var beep = function() {
|
||||||
|
navigator.notification.beep(2);
|
||||||
|
};
|
||||||
|
|
||||||
|
var vibrate = function() {
|
||||||
|
navigator.notification.vibrate(0);
|
||||||
|
};
|
||||||
|
|
||||||
|
function roundNumber(num) {
|
||||||
|
var dec = 3;
|
||||||
|
var result = Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
var accelerationWatch = null;
|
||||||
|
|
||||||
|
function updateAcceleration(a) {
|
||||||
|
document.getElementById('x').innerHTML = roundNumber(a.x);
|
||||||
|
document.getElementById('y').innerHTML = roundNumber(a.y);
|
||||||
|
document.getElementById('z').innerHTML = roundNumber(a.z);
|
||||||
|
}
|
||||||
|
|
||||||
|
var toggleAccel = function() {
|
||||||
|
if (accelerationWatch !== null) {
|
||||||
|
navigator.accelerometer.clearWatch(accelerationWatch);
|
||||||
|
updateAcceleration({
|
||||||
|
x : "",
|
||||||
|
y : "",
|
||||||
|
z : ""
|
||||||
|
});
|
||||||
|
accelerationWatch = null;
|
||||||
|
} else {
|
||||||
|
var options = {};
|
||||||
|
options.frequency = 1000;
|
||||||
|
accelerationWatch = navigator.accelerometer.watchAcceleration(
|
||||||
|
updateAcceleration, function(ex) {
|
||||||
|
alert("accel fail (" + ex.name + ": " + ex.message + ")");
|
||||||
|
}, options);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var preventBehavior = function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
};
|
||||||
|
|
||||||
|
function dump_pic(data) {
|
||||||
|
var viewport = document.getElementById('viewport');
|
||||||
|
console.log(data);
|
||||||
|
viewport.style.display = "";
|
||||||
|
viewport.style.position = "absolute";
|
||||||
|
viewport.style.top = "10px";
|
||||||
|
viewport.style.left = "10px";
|
||||||
|
document.getElementById("test_img").src = "data:image/jpeg;base64," + data;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fail(msg) {
|
||||||
|
alert(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
function show_pic() {
|
||||||
|
navigator.camera.getPicture(dump_pic, fail, {
|
||||||
|
quality : 50
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function close() {
|
||||||
|
var viewport = document.getElementById('viewport');
|
||||||
|
viewport.style.position = "relative";
|
||||||
|
viewport.style.display = "none";
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is just to do this.
|
||||||
|
function readFile() {
|
||||||
|
navigator.file.read('/sdcard/cordova.txt', fail, fail);
|
||||||
|
}
|
||||||
|
|
||||||
|
function writeFile() {
|
||||||
|
navigator.file.write('foo.txt', "This is a test of writing to a file",
|
||||||
|
fail, fail);
|
||||||
|
}
|
||||||
|
|
||||||
|
function contacts_success(contacts) {
|
||||||
|
alert(contacts.length
|
||||||
|
+ ' contacts returned.'
|
||||||
|
+ (contacts[2] && contacts[2].name ? (' Third contact is ' + contacts[2].name.formatted)
|
||||||
|
: ''));
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_contacts() {
|
||||||
|
var obj = new ContactFindOptions();
|
||||||
|
obj.filter = "";
|
||||||
|
obj.multiple = true;
|
||||||
|
obj.limit = 5;
|
||||||
|
navigator.service.contacts.find(
|
||||||
|
[ "displayName", "name" ], contacts_success,
|
||||||
|
fail, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
var networkReachableCallback = function(reachability) {
|
||||||
|
// There is no consistency on the format of reachability
|
||||||
|
var networkState = reachability.code || reachability;
|
||||||
|
|
||||||
|
var currentState = {};
|
||||||
|
currentState[NetworkStatus.NOT_REACHABLE] = 'No network connection';
|
||||||
|
currentState[NetworkStatus.REACHABLE_VIA_CARRIER_DATA_NETWORK] = 'Carrier data connection';
|
||||||
|
currentState[NetworkStatus.REACHABLE_VIA_WIFI_NETWORK] = 'WiFi connection';
|
||||||
|
|
||||||
|
confirm("Connection type:\n" + currentState[networkState]);
|
||||||
|
};
|
||||||
|
|
||||||
|
function check_network() {
|
||||||
|
navigator.network.isReachable("www.mobiledevelopersolutions.com",
|
||||||
|
networkReachableCallback, {});
|
||||||
|
}
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
// the next line makes it impossible to see Contacts on the HTC Evo since it
|
||||||
|
// doesn't have a scroll button
|
||||||
|
// document.addEventListener("touchmove", preventBehavior, false);
|
||||||
|
document.addEventListener("deviceready", deviceInfo, true);
|
||||||
|
document.getElementById("user-agent").textContent = navigator.userAgent;
|
||||||
|
}
|
164
test/master.css
Normal file
164
test/master.css
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
body {
|
||||||
|
background:#222 none repeat scroll 0 0;
|
||||||
|
color:#666;
|
||||||
|
font-family:Helvetica;
|
||||||
|
font-size:72%;
|
||||||
|
line-height:1.5em;
|
||||||
|
margin:0;
|
||||||
|
border-top:1px solid #393939;
|
||||||
|
}
|
||||||
|
|
||||||
|
#info{
|
||||||
|
background:#ffa;
|
||||||
|
border: 1px solid #ffd324;
|
||||||
|
-webkit-border-radius: 5px;
|
||||||
|
border-radius: 5px;
|
||||||
|
clear:both;
|
||||||
|
margin:15px 6px 0;
|
||||||
|
min-width:295px;
|
||||||
|
max-width:97%;
|
||||||
|
padding:4px 0px 2px 10px;
|
||||||
|
word-wrap:break-word;
|
||||||
|
margin-bottom:10px;
|
||||||
|
display:inline-block;
|
||||||
|
min-height: 160px;
|
||||||
|
max-height: 300px;
|
||||||
|
overflow: auto;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
|
}
|
||||||
|
|
||||||
|
#info > h4{
|
||||||
|
font-size:.95em;
|
||||||
|
margin:5px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stage.theme{
|
||||||
|
padding-top:3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Definition List */
|
||||||
|
#stage.theme > dl{
|
||||||
|
padding-top:10px;
|
||||||
|
clear:both;
|
||||||
|
margin:0;
|
||||||
|
list-style-type:none;
|
||||||
|
padding-left:10px;
|
||||||
|
overflow:auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stage.theme > dl > dt{
|
||||||
|
font-weight:bold;
|
||||||
|
float:left;
|
||||||
|
margin-left:5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stage.theme > dl > dd{
|
||||||
|
width:45px;
|
||||||
|
float:left;
|
||||||
|
color:#a87;
|
||||||
|
font-weight:bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Content Styling */
|
||||||
|
#stage.theme > h1, #stage.theme > h2, #stage.theme > p{
|
||||||
|
margin:1em 0 .5em 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stage.theme > h1{
|
||||||
|
color:#eee;
|
||||||
|
font-size:1.6em;
|
||||||
|
text-align:center;
|
||||||
|
margin:0;
|
||||||
|
margin-top:15px;
|
||||||
|
padding:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stage.theme > h2{
|
||||||
|
clear:both;
|
||||||
|
margin:0;
|
||||||
|
padding:3px;
|
||||||
|
font-size:1em;
|
||||||
|
text-align:center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Stage Buttons */
|
||||||
|
#stage.theme .btn{
|
||||||
|
border: 1px solid #555;
|
||||||
|
-webkit-border-radius: 5px;
|
||||||
|
border-radius: 5px;
|
||||||
|
text-align:center;
|
||||||
|
display:inline-block;
|
||||||
|
background:#444;
|
||||||
|
width:150px;
|
||||||
|
color:#9ab;
|
||||||
|
font-size:1.1em;
|
||||||
|
text-decoration:none;
|
||||||
|
padding:1.2em 0;
|
||||||
|
margin:3px 0px 3px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stage.theme .large{
|
||||||
|
width:308px;
|
||||||
|
padding:1.2em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stage.theme .wide{
|
||||||
|
width:100%;
|
||||||
|
padding:1.2em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stage.theme .backBtn{
|
||||||
|
border: 1px solid #555;
|
||||||
|
-webkit-border-radius: 5px;
|
||||||
|
border-radius: 5px;
|
||||||
|
text-align:center;
|
||||||
|
display:block;
|
||||||
|
float:right;
|
||||||
|
background:#666;
|
||||||
|
width:75px;
|
||||||
|
color:#9ab;
|
||||||
|
font-size:1.1em;
|
||||||
|
text-decoration:none;
|
||||||
|
padding:1.2em 0;
|
||||||
|
margin:3px 5px 3px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stage.theme .input{
|
||||||
|
border: 1px solid #555;
|
||||||
|
-webkit-border-radius: 5px;
|
||||||
|
border-radius: 5px;
|
||||||
|
text-align:center;
|
||||||
|
display:block;
|
||||||
|
float:light;
|
||||||
|
background:#888;
|
||||||
|
color:#9cd;
|
||||||
|
font-size:1.1em;
|
||||||
|
text-decoration:none;
|
||||||
|
padding:1.2em 0;
|
||||||
|
margin:3px 0px 3px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stage.theme .numeric{
|
||||||
|
width:100%;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user