mirror of
https://github.com/shuto-cn/cordova-plugin-inappbrowser.git
synced 2026-04-16 00:00:05 +08:00
Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b0bdb1088b | |||
| 6163f17aeb | |||
| 176890f305 | |||
| 2bd006b71e | |||
| aac2db29b5 | |||
| 97c6f2ba8a | |||
| f75b30857b | |||
| 25d152b578 | |||
| 4aeaf81e1e | |||
| 20611efe67 | |||
| e819041fd4 | |||
| 034b599315 | |||
| f448ce88ab | |||
| ea239151d2 |
@@ -1,5 +1,22 @@
|
|||||||
cordova-plugin-inappbrowser
|
<!---
|
||||||
-----------------------------
|
license: Licensed to the Apache Software Foundation (ASF) under one
|
||||||
To install this plugin, follow the [Command-line Interface Guide](http://cordova.apache.org/docs/en/edge/guide_cli_index.md.html#The%20Command-line%20Interface).
|
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
|
||||||
|
|
||||||
If you are not using the Cordova Command-line Interface, follow [Using Plugman to Manage Plugins](http://cordova.apache.org/docs/en/edge/plugin_ref_plugman.md.html).
|
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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
# org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
|
Plugin documentation: [doc/index.md](doc/index.md)
|
||||||
|
|||||||
@@ -55,3 +55,12 @@
|
|||||||
* add ubuntu platform
|
* add ubuntu platform
|
||||||
* CB-3420 WP feature hidden=yes implemented
|
* CB-3420 WP feature hidden=yes implemented
|
||||||
* Added amazon-fireos platform. Change to use amazon-fireos as the platform if user agent string contains 'cordova-amazon-fireos'
|
* Added amazon-fireos platform. Change to use amazon-fireos as the platform if user agent string contains 'cordova-amazon-fireos'
|
||||||
|
|
||||||
|
### 0.3.0 (Jan 02, 2014)
|
||||||
|
* CB-5592 Android: Add MIME type to Intent when opening file:/// URLs
|
||||||
|
* CB-5594 iOS: Add disallowoverscroll option.
|
||||||
|
* CB-5658 Add doc/index.md for InAppBrowser plugin
|
||||||
|
* CB-5595 Add toolbarposition=top option.
|
||||||
|
* Apply CB-5193 to InAppBrowser (Fix DB quota exception)
|
||||||
|
* CB-5593 iOS: Make InAppBrowser localizable
|
||||||
|
* CB-5591 Change window.escape to encodeURIComponent
|
||||||
|
|||||||
+280
@@ -0,0 +1,280 @@
|
|||||||
|
<!---
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
# org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
|
This plugin provides a web browser view that displays when calling `window.open()`, or when opening a link formed as `<a target="_blank">`.
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
|
||||||
|
__NOTE__: The InAppBrowser window behaves like a standard web browser,
|
||||||
|
and can't access Cordova APIs.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
cordova plugin add org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
|
## 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 the URL contains Unicode characters.
|
||||||
|
|
||||||
|
- __target__: The target in which to load the URL, an optional parameter that defaults to `_self`. _(String)_
|
||||||
|
|
||||||
|
- `_self`: Opens in the Cordova WebView if the URL is in the white list, otherwise it opens in the `InAppBrowser`.
|
||||||
|
- `_blank`: Opens in the `InAppBrowser`.
|
||||||
|
- `_system`: Opens in the system's web browser.
|
||||||
|
|
||||||
|
- __options__: Options for the `InAppBrowser`. Optional, defaulting to: `location=yes`. _(String)_
|
||||||
|
|
||||||
|
The `options` string must not contain any blank space, and each feature's name/value pairs must be separated by a comma. Feature names are case insensitive. All platforms support the value below:
|
||||||
|
|
||||||
|
- __location__: Set to `yes` or `no` to turn the `InAppBrowser`'s location bar on or off.
|
||||||
|
|
||||||
|
Android only:
|
||||||
|
|
||||||
|
- __closebuttoncaption__: set to a string to use as the __Done__ button's caption.
|
||||||
|
- __hidden__: set to `yes` to create the browser and load the page, but not show it. The load event fires when loading is complete. Omit or set to `no` (default) to have the browser open and load normally.
|
||||||
|
- __clearcache__: set to `yes` to have the browser's cookie cache cleared before the new window is opened
|
||||||
|
- __clearsessioncache__: set to `yes` to have the session cookie cache cleared before the new window is opened
|
||||||
|
|
||||||
|
iOS only:
|
||||||
|
|
||||||
|
- __closebuttoncaption__: set to a string to use as the __Done__ button's caption. Note that you need to localize this value yourself.
|
||||||
|
- __disallowoverscroll__: Set to `yes` or `no` (default is `no`). Turns on/off the UIWebViewBounce property.
|
||||||
|
- __hidden__: set to `yes` to create the browser and load the page, but not show it. The load event fires when loading is complete. Omit or set to `no` (default) to have the browser open and load normally.
|
||||||
|
- __toolbar__: set to `yes` or `no` to turn the toolbar on or off for the InAppBrowser (defaults to `yes`)
|
||||||
|
- __enableViewportScale__: Set to `yes` or `no` to prevent viewport scaling through a meta tag (defaults to `no`).
|
||||||
|
- __mediaPlaybackRequiresUserAction__: Set to `yes` or `no` to prevent HTML5 audio or video from autoplaying (defaults to `no`).
|
||||||
|
- __allowInlineMediaPlayback__: Set to `yes` or `no` to allow in-line HTML5 media playback, displaying within the browser window rather than a device-specific playback interface. The HTML's `video` element must also include the `webkit-playsinline` attribute (defaults to `no`)
|
||||||
|
- __keyboardDisplayRequiresUserAction__: Set to `yes` or `no` to open the keyboard when form elements receive focus via JavaScript's `focus()` call (defaults to `yes`).
|
||||||
|
- __suppressesIncrementalRendering__: Set to `yes` or `no` to wait until all new view content is received before being 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`).
|
||||||
|
- __toolbarposition__: Set to `top` or `bottom` (default is `bottom`). Causes the toolbar to be at the top or bottom of the window.
|
||||||
|
|
||||||
|
### Supported Platforms
|
||||||
|
|
||||||
|
- Amazon Fire OS
|
||||||
|
- Android
|
||||||
|
- BlackBerry 10
|
||||||
|
- iOS
|
||||||
|
- Windows Phone 7 and 8
|
||||||
|
|
||||||
|
### 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');
|
||||||
|
|
||||||
|
## InAppBrowser
|
||||||
|
|
||||||
|
The object returned from a call to `window.open`.
|
||||||
|
|
||||||
|
### Methods
|
||||||
|
|
||||||
|
- addEventListener
|
||||||
|
- removeEventListener
|
||||||
|
- close
|
||||||
|
- show
|
||||||
|
- executeScript
|
||||||
|
- insertCSS
|
||||||
|
|
||||||
|
## 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 fires when the `InAppBrowser` starts to load a URL.
|
||||||
|
- __loadstop__: event fires when the `InAppBrowser` finishes loading a URL.
|
||||||
|
- __loaderror__: event fires when the `InAppBrowser` encounters an error when loading a URL.
|
||||||
|
- __exit__: event fires when the `InAppBrowser` window is closed.
|
||||||
|
|
||||||
|
- __callback__: the function that executes when the event fires. The function is passed an `InAppBrowserEvent` object as a parameter.
|
||||||
|
|
||||||
|
### InAppBrowserEvent Properties
|
||||||
|
|
||||||
|
- __type__: the eventname, either `loadstart`, `loadstop`, `loaderror`, or `exit`. _(String)_
|
||||||
|
|
||||||
|
- __url__: the URL that was loaded. _(String)_
|
||||||
|
|
||||||
|
- __code__: the error code, only in the case of `loaderror`. _(Number)_
|
||||||
|
|
||||||
|
- __message__: the error message, only in the case of `loaderror`. _(String)_
|
||||||
|
|
||||||
|
|
||||||
|
### Supported Platforms
|
||||||
|
|
||||||
|
- Amazon Fire OS
|
||||||
|
- Android
|
||||||
|
- BlackBerry 10
|
||||||
|
- iOS
|
||||||
|
- Windows Phone 7 and 8
|
||||||
|
|
||||||
|
### Quick Example
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstart', function() { alert(event.url); });
|
||||||
|
|
||||||
|
## 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 fires when the `InAppBrowser` starts to load a URL.
|
||||||
|
- __loadstop__: event fires when the `InAppBrowser` finishes loading a URL.
|
||||||
|
- __loaderror__: event fires when the `InAppBrowser` encounters an error loading a URL.
|
||||||
|
- __exit__: event fires when the `InAppBrowser` window is closed.
|
||||||
|
|
||||||
|
- __callback__: the function to execute when the event fires.
|
||||||
|
The function is passed an `InAppBrowserEvent` object.
|
||||||
|
|
||||||
|
### Supported Platforms
|
||||||
|
|
||||||
|
- Amazon Fire OS
|
||||||
|
- Android
|
||||||
|
- BlackBerry 10
|
||||||
|
- iOS
|
||||||
|
- Windows Phone 7 and 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);
|
||||||
|
|
||||||
|
## close
|
||||||
|
|
||||||
|
> Closes the `InAppBrowser` window.
|
||||||
|
|
||||||
|
ref.close();
|
||||||
|
|
||||||
|
- __ref__: reference to the `InAppBrowser` window _(InAppBrowser)_
|
||||||
|
|
||||||
|
### Supported Platforms
|
||||||
|
|
||||||
|
- Amazon Fire OS
|
||||||
|
- Android
|
||||||
|
- BlackBerry 10
|
||||||
|
- iOS
|
||||||
|
- Windows Phone 7 and 8
|
||||||
|
|
||||||
|
### Quick Example
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.close();
|
||||||
|
|
||||||
|
## show
|
||||||
|
|
||||||
|
> Displays an InAppBrowser window that was opened hidden. Calling this has no effect if the InAppBrowser was already visible.
|
||||||
|
|
||||||
|
ref.show();
|
||||||
|
|
||||||
|
- __ref__: reference to the InAppBrowser window (`InAppBrowser`)
|
||||||
|
|
||||||
|
### Supported Platforms
|
||||||
|
|
||||||
|
- Amazon Fire OS
|
||||||
|
- Android
|
||||||
|
- BlackBerry 10
|
||||||
|
- iOS
|
||||||
|
|
||||||
|
### Quick Example
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'hidden=yes');
|
||||||
|
// some time later...
|
||||||
|
ref.show();
|
||||||
|
|
||||||
|
## executeScript
|
||||||
|
|
||||||
|
> Injects JavaScript code into the `InAppBrowser` window
|
||||||
|
|
||||||
|
ref.executeScript(details, callback);
|
||||||
|
|
||||||
|
- __ref__: reference to the `InAppBrowser` window. _(InAppBrowser)_
|
||||||
|
|
||||||
|
- __injectDetails__: details of the script to run, specifying either a `file` or `code` key. _(Object)_
|
||||||
|
- __file__: URL of the script to inject.
|
||||||
|
- __code__: Text of the script to inject.
|
||||||
|
|
||||||
|
- __callback__: the function that executes after the JavaScript code is injected.
|
||||||
|
- If the injected script is of type `code`, the callback executes
|
||||||
|
with a single parameter, 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
|
||||||
|
|
||||||
|
- Amazon Fire OS
|
||||||
|
- Android
|
||||||
|
- BlackBerry 10
|
||||||
|
- iOS
|
||||||
|
|
||||||
|
### Quick Example
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.executeScript({file: "myscript.js"});
|
||||||
|
});
|
||||||
|
|
||||||
|
## insertCSS
|
||||||
|
|
||||||
|
> Injects CSS into the `InAppBrowser` window.
|
||||||
|
|
||||||
|
ref.insertCSS(details, callback);
|
||||||
|
|
||||||
|
- __ref__: reference to the `InAppBrowser` window _(InAppBrowser)_
|
||||||
|
|
||||||
|
- __injectDetails__: details of the script to run, specifying either a `file` or `code` key. _(Object)_
|
||||||
|
- __file__: URL of the stylesheet to inject.
|
||||||
|
- __code__: Text of the stylesheet to inject.
|
||||||
|
|
||||||
|
- __callback__: the function that executes after the CSS is injected.
|
||||||
|
|
||||||
|
### Supported Platforms
|
||||||
|
|
||||||
|
- Amazon Fire OS
|
||||||
|
- Android
|
||||||
|
- BlackBerry 10
|
||||||
|
- iOS
|
||||||
|
|
||||||
|
### Quick Example
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.insertCSS({file: "mystyles.css"});
|
||||||
|
});
|
||||||
|
|
||||||
@@ -1,427 +0,0 @@
|
|||||||
---
|
|
||||||
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 displays in the app when calling `window.open`.
|
|
||||||
|
|
||||||
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 fires when the `InAppBrowser` starts to load a URL.
|
|
||||||
- __loadstop__: event fires when the `InAppBrowser` finishes loading a URL.
|
|
||||||
- __loaderror__: event fires when the `InAppBrowser` encounters an error when loading a URL.
|
|
||||||
- __exit__: event fires when the `InAppBrowser` window is closed.
|
|
||||||
|
|
||||||
- __callback__: the function that executes when the event fires. The function is passed an `InAppBrowserEvent` object as a parameter.
|
|
||||||
|
|
||||||
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 device API libraries to load
|
|
||||||
//
|
|
||||||
document.addEventListener("deviceready", onDeviceReady, false);
|
|
||||||
|
|
||||||
// device APIs are available
|
|
||||||
//
|
|
||||||
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 fires when the `InAppBrowser` starts to load a URL.
|
|
||||||
- __loadstop__: event fires when the `InAppBrowser` finishes loading a URL.
|
|
||||||
- __loaderror__: event fires when the `InAppBrowser` encounters an error loading a URL.
|
|
||||||
- __exit__: event fires when the `InAppBrowser` window is closed.
|
|
||||||
|
|
||||||
- __callback__: the function to execute when the event fires.
|
|
||||||
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 device API libraries 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
// device APIs are available
|
|
||||||
//
|
|
||||||
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 device API libraries to load
|
|
||||||
//
|
|
||||||
document.addEventListener("deviceready", onDeviceReady, false);
|
|
||||||
|
|
||||||
// device APIs are available
|
|
||||||
//
|
|
||||||
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 to run, specifying either a `file` or `code` key. _(Object)_
|
|
||||||
- __file__: URL of the script to inject.
|
|
||||||
- __code__: Text of the script to inject.
|
|
||||||
- __callback__: the function that executes after the JavaScript code is injected.
|
|
||||||
- If the injected script is of type `code`, the callback executes
|
|
||||||
with a single parameter, 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-x.x.x.js"></script>
|
|
||||||
<script type="text/javascript" charset="utf-8">
|
|
||||||
|
|
||||||
// Wait for device API libraries 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
// device APIs are available
|
|
||||||
//
|
|
||||||
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 to run, specifying either a `file` or `code` key. _(Object)_
|
|
||||||
- __file__: URL of the stylesheet to inject.
|
|
||||||
- __code__: Text of the stylesheet to inject.
|
|
||||||
- __callback__: the function that executes 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-x.x.x.js"></script>
|
|
||||||
<script type="text/javascript" charset="utf-8">
|
|
||||||
|
|
||||||
// Wait for device API libraries 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
// device APIs are available
|
|
||||||
//
|
|
||||||
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, either `loadstart`, `loadstop`, `loaderror`, or `exit`. _(String)_
|
|
||||||
- __url__: the URL that was loaded. _(String)_
|
|
||||||
- __code__: the error code, only in the case of `loaderror`. _(Number)_
|
|
||||||
- __message__: the error message, only in the case of `loaderror`. _(String)_
|
|
||||||
@@ -1,100 +0,0 @@
|
|||||||
---
|
|
||||||
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 the URL contains Unicode characters.
|
|
||||||
- __target__: The target in which to load the URL, an optional parameter that defaults to `_self`. _(String)_
|
|
||||||
|
|
||||||
- `_self`: Opens in the Cordova WebView if the URL is in the white list, otherwise it opens in the `InAppBrowser`.
|
|
||||||
- `_blank`: Opens in the `InAppBrowser`.
|
|
||||||
- `_system`: Opens in the system's web browser.
|
|
||||||
|
|
||||||
- __options__: Options for the `InAppBrowser`. Optional, defaulting to: `location=yes`. _(String)_
|
|
||||||
|
|
||||||
The `options` string must not contain any blank space, and each feature's name/value pairs must be separated by a comma. Feature names are case insensitive. All platforms support the value below:
|
|
||||||
|
|
||||||
- __location__: Set to `yes` or `no` to turn the `InAppBrowser`'s location bar on or off.
|
|
||||||
|
|
||||||
Android only
|
|
||||||
------------
|
|
||||||
- __closebuttoncaption__ - set to a string that will be the caption for the "Done" button.
|
|
||||||
|
|
||||||
iOS only
|
|
||||||
--------
|
|
||||||
- __closebuttoncaption__ - set to a string that will be the caption for the "Done" button. Note that you will have to localize this value yourself.
|
|
||||||
- __toolbar__ - set to 'yes' or 'no' to turn the toolbar on or off for the InAppBrowser (defaults to 'yes')
|
|
||||||
- __enableViewportScale__: Set to `yes` or `no` to prevent viewport scaling through a meta tag (defaults to `no`).
|
|
||||||
- __mediaPlaybackRequiresUserAction__: Set to `yes` or `no` to prevent HTML5 audio or video from autoplaying (defaults to `no`).
|
|
||||||
- __allowInlineMediaPlayback__: Set to `yes` or `no` to allow inline HTML5 media playback, displaying within the browser window rather than a device-specific playback interface. The HTML's `video` element must also include the `webkit-playsinline` attribute (defaults to `no`)
|
|
||||||
- __keyboardDisplayRequiresUserAction__: Set to `yes` or `no` to open the keyboard when form elements receive focus via JavaScript's `focus()` call (defaults to `yes`).
|
|
||||||
- __suppressesIncrementalRendering__: Set to `yes` or `no` to wait until all new view content is received before being 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 device API libraries to load
|
|
||||||
//
|
|
||||||
document.addEventListener("deviceready", onDeviceReady, false);
|
|
||||||
|
|
||||||
// device APIs are available
|
|
||||||
//
|
|
||||||
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>
|
|
||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
|
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
|
||||||
id="org.apache.cordova.inappbrowser"
|
id="org.apache.cordova.inappbrowser"
|
||||||
version="0.2.5">
|
version="0.3.0">
|
||||||
|
|
||||||
<name>InAppBrowser</name>
|
<name>InAppBrowser</name>
|
||||||
<description>Cordova InAppBrowser Plugin</description>
|
<description>Cordova InAppBrowser Plugin</description>
|
||||||
|
|||||||
@@ -300,7 +300,14 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
try {
|
try {
|
||||||
Intent intent = null;
|
Intent intent = null;
|
||||||
intent = new Intent(Intent.ACTION_VIEW);
|
intent = new Intent(Intent.ACTION_VIEW);
|
||||||
intent.setData(Uri.parse(url));
|
// Omitting the MIME type for file: URLs causes "No Activity found to handle Intent".
|
||||||
|
// Adding the MIME type to http: URLs causes them to not be handled by the downloader.
|
||||||
|
Uri uri = Uri.parse(url);
|
||||||
|
if ("file".equals(uri.getScheme())) {
|
||||||
|
intent.setDataAndType(uri, webView.getResourceApi().getMimeType(uri));
|
||||||
|
} else {
|
||||||
|
intent.setData(uri);
|
||||||
|
}
|
||||||
this.cordova.getActivity().startActivity(intent);
|
this.cordova.getActivity().startActivity(intent);
|
||||||
return "";
|
return "";
|
||||||
} catch (android.content.ActivityNotFoundException e) {
|
} catch (android.content.ActivityNotFoundException e) {
|
||||||
|
|||||||
@@ -38,20 +38,7 @@ public class InAppChromeClient extends WebChromeClient {
|
|||||||
long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater)
|
long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater)
|
||||||
{
|
{
|
||||||
LOG.d(LOG_TAG, "onExceededDatabaseQuota estimatedSize: %d currentQuota: %d totalUsedQuota: %d", estimatedSize, currentQuota, totalUsedQuota);
|
LOG.d(LOG_TAG, "onExceededDatabaseQuota estimatedSize: %d currentQuota: %d totalUsedQuota: %d", estimatedSize, currentQuota, totalUsedQuota);
|
||||||
|
quotaUpdater.updateQuota(MAX_QUOTA);
|
||||||
if (estimatedSize < MAX_QUOTA)
|
|
||||||
{
|
|
||||||
//increase for 1Mb
|
|
||||||
long newQuota = estimatedSize;
|
|
||||||
LOG.d(LOG_TAG, "calling quotaUpdater.updateQuota newQuota: %d", newQuota);
|
|
||||||
quotaUpdater.updateQuota(newQuota);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Set the quota to whatever it is and force an error
|
|
||||||
// TODO: get docs on how to handle this properly
|
|
||||||
quotaUpdater.updateQuota(currentQuota);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+26
-23
@@ -38,11 +38,34 @@
|
|||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@interface CDVInAppBrowserOptions : NSObject {}
|
||||||
|
|
||||||
|
@property (nonatomic, assign) BOOL location;
|
||||||
|
@property (nonatomic, assign) BOOL toolbar;
|
||||||
|
@property (nonatomic, copy) NSString* closebuttoncaption;
|
||||||
|
@property (nonatomic, copy) NSString* toolbarposition;
|
||||||
|
|
||||||
|
@property (nonatomic, copy) NSString* presentationstyle;
|
||||||
|
@property (nonatomic, copy) NSString* transitionstyle;
|
||||||
|
|
||||||
|
@property (nonatomic, assign) BOOL enableviewportscale;
|
||||||
|
@property (nonatomic, assign) BOOL mediaplaybackrequiresuseraction;
|
||||||
|
@property (nonatomic, assign) BOOL allowinlinemediaplayback;
|
||||||
|
@property (nonatomic, assign) BOOL keyboarddisplayrequiresuseraction;
|
||||||
|
@property (nonatomic, assign) BOOL suppressesincrementalrendering;
|
||||||
|
@property (nonatomic, assign) BOOL hidden;
|
||||||
|
@property (nonatomic, assign) BOOL disallowoverscroll;
|
||||||
|
|
||||||
|
+ (CDVInAppBrowserOptions*)parseOptions:(NSString*)options;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
@interface CDVInAppBrowserViewController : UIViewController <UIWebViewDelegate>{
|
@interface CDVInAppBrowserViewController : UIViewController <UIWebViewDelegate>{
|
||||||
@private
|
@private
|
||||||
NSString* _userAgent;
|
NSString* _userAgent;
|
||||||
NSString* _prevUserAgent;
|
NSString* _prevUserAgent;
|
||||||
NSInteger _userAgentLockToken;
|
NSInteger _userAgentLockToken;
|
||||||
|
CDVInAppBrowserOptions *_browserOptions;
|
||||||
CDVWebViewDelegate* _webViewDelegate;
|
CDVWebViewDelegate* _webViewDelegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,29 +84,9 @@
|
|||||||
- (void)close;
|
- (void)close;
|
||||||
- (void)navigateTo:(NSURL*)url;
|
- (void)navigateTo:(NSURL*)url;
|
||||||
- (void)showLocationBar:(BOOL)show;
|
- (void)showLocationBar:(BOOL)show;
|
||||||
- (void)showToolBar:(BOOL)show;
|
- (void)showToolBar:(BOOL)show : (NSString *) toolbarPosition;
|
||||||
- (void)setCloseButtonTitle:(NSString*)title;
|
- (void)setCloseButtonTitle:(NSString*)title;
|
||||||
|
|
||||||
- (id)initWithUserAgent:(NSString*)userAgent prevUserAgent:(NSString*)prevUserAgent;
|
- (id)initWithUserAgent:(NSString*)userAgent prevUserAgent:(NSString*)prevUserAgent browserOptions: (CDVInAppBrowserOptions*) browserOptions;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface CDVInAppBrowserOptions : NSObject {}
|
|
||||||
|
|
||||||
@property (nonatomic, assign) BOOL location;
|
|
||||||
@property (nonatomic, assign) BOOL toolbar;
|
|
||||||
@property (nonatomic, copy) NSString* closebuttoncaption;
|
|
||||||
|
|
||||||
@property (nonatomic, copy) NSString* presentationstyle;
|
|
||||||
@property (nonatomic, copy) NSString* transitionstyle;
|
|
||||||
|
|
||||||
@property (nonatomic, assign) BOOL enableviewportscale;
|
|
||||||
@property (nonatomic, assign) BOOL mediaplaybackrequiresuseraction;
|
|
||||||
@property (nonatomic, assign) BOOL allowinlinemediaplayback;
|
|
||||||
@property (nonatomic, assign) BOOL keyboarddisplayrequiresuseraction;
|
|
||||||
@property (nonatomic, assign) BOOL suppressesincrementalrendering;
|
|
||||||
@property (nonatomic, assign) BOOL hidden;
|
|
||||||
|
|
||||||
+ (CDVInAppBrowserOptions*)parseOptions:(NSString*)options;
|
|
||||||
|
|
||||||
@end
|
|
||||||
+83
-39
@@ -26,6 +26,9 @@
|
|||||||
#define kInAppBrowserTargetSystem @"_system"
|
#define kInAppBrowserTargetSystem @"_system"
|
||||||
#define kInAppBrowserTargetBlank @"_blank"
|
#define kInAppBrowserTargetBlank @"_blank"
|
||||||
|
|
||||||
|
#define kInAppBrowserToolbarBarPositionBottom @"bottom"
|
||||||
|
#define kInAppBrowserToolbarBarPositionTop @"top"
|
||||||
|
|
||||||
#define TOOLBAR_HEIGHT 44.0
|
#define TOOLBAR_HEIGHT 44.0
|
||||||
#define LOCATIONBAR_HEIGHT 21.0
|
#define LOCATIONBAR_HEIGHT 21.0
|
||||||
#define FOOTER_HEIGHT ((TOOLBAR_HEIGHT) + (LOCATIONBAR_HEIGHT))
|
#define FOOTER_HEIGHT ((TOOLBAR_HEIGHT) + (LOCATIONBAR_HEIGHT))
|
||||||
@@ -106,9 +109,10 @@
|
|||||||
|
|
||||||
- (void)openInInAppBrowser:(NSURL*)url withOptions:(NSString*)options
|
- (void)openInInAppBrowser:(NSURL*)url withOptions:(NSString*)options
|
||||||
{
|
{
|
||||||
|
CDVInAppBrowserOptions* browserOptions = [CDVInAppBrowserOptions parseOptions:options];
|
||||||
if (self.inAppBrowserViewController == nil) {
|
if (self.inAppBrowserViewController == nil) {
|
||||||
NSString* originalUA = [CDVUserAgentUtil originalUserAgent];
|
NSString* originalUA = [CDVUserAgentUtil originalUserAgent];
|
||||||
self.inAppBrowserViewController = [[CDVInAppBrowserViewController alloc] initWithUserAgent:originalUA prevUserAgent:[self.commandDelegate userAgent]];
|
self.inAppBrowserViewController = [[CDVInAppBrowserViewController alloc] initWithUserAgent:originalUA prevUserAgent:[self.commandDelegate userAgent] browserOptions: browserOptions];
|
||||||
self.inAppBrowserViewController.navigationDelegate = self;
|
self.inAppBrowserViewController.navigationDelegate = self;
|
||||||
|
|
||||||
if ([self.viewController conformsToProtocol:@protocol(CDVScreenOrientationDelegate)]) {
|
if ([self.viewController conformsToProtocol:@protocol(CDVScreenOrientationDelegate)]) {
|
||||||
@@ -118,9 +122,8 @@
|
|||||||
|
|
||||||
_previousStatusBarStyle = [UIApplication sharedApplication].statusBarStyle;
|
_previousStatusBarStyle = [UIApplication sharedApplication].statusBarStyle;
|
||||||
|
|
||||||
CDVInAppBrowserOptions* browserOptions = [CDVInAppBrowserOptions parseOptions:options];
|
|
||||||
[self.inAppBrowserViewController showLocationBar:browserOptions.location];
|
[self.inAppBrowserViewController showLocationBar:browserOptions.location];
|
||||||
[self.inAppBrowserViewController showToolBar:browserOptions.toolbar];
|
[self.inAppBrowserViewController showToolBar:browserOptions.toolbar :browserOptions.toolbarposition];
|
||||||
if (browserOptions.closebuttoncaption != nil) {
|
if (browserOptions.closebuttoncaption != nil) {
|
||||||
[self.inAppBrowserViewController setCloseButtonTitle:browserOptions.closebuttoncaption];
|
[self.inAppBrowserViewController setCloseButtonTitle:browserOptions.closebuttoncaption];
|
||||||
}
|
}
|
||||||
@@ -146,6 +149,18 @@
|
|||||||
}
|
}
|
||||||
self.inAppBrowserViewController.modalTransitionStyle = transitionStyle;
|
self.inAppBrowserViewController.modalTransitionStyle = transitionStyle;
|
||||||
|
|
||||||
|
// prevent webView from bouncing
|
||||||
|
if (browserOptions.disallowoverscroll) {
|
||||||
|
if ([self.inAppBrowserViewController.webView respondsToSelector:@selector(scrollView)]) {
|
||||||
|
((UIScrollView*)[self.inAppBrowserViewController.webView scrollView]).bounces = NO;
|
||||||
|
} else {
|
||||||
|
for (id subview in self.inAppBrowserViewController.webView.subviews) {
|
||||||
|
if ([[subview class] isSubclassOfClass:[UIScrollView class]]) {
|
||||||
|
((UIScrollView*)subview).bounces = NO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// UIWebView options
|
// UIWebView options
|
||||||
self.inAppBrowserViewController.webView.scalesPageToFit = browserOptions.enableviewportscale;
|
self.inAppBrowserViewController.webView.scalesPageToFit = browserOptions.enableviewportscale;
|
||||||
@@ -235,7 +250,7 @@
|
|||||||
NSString* jsWrapper = nil;
|
NSString* jsWrapper = nil;
|
||||||
|
|
||||||
if ((command.callbackId != nil) && ![command.callbackId isEqualToString:@"INVALID"]) {
|
if ((command.callbackId != nil) && ![command.callbackId isEqualToString:@"INVALID"]) {
|
||||||
jsWrapper = [NSString stringWithFormat:@"_cdvIframeBridge.src='gap-iab://%@/'+window.escape(JSON.stringify([eval(%%@)]));", command.callbackId];
|
jsWrapper = [NSString stringWithFormat:@"_cdvIframeBridge.src='gap-iab://%@/'+encodeURIComponent(JSON.stringify([eval(%%@)]));", command.callbackId];
|
||||||
}
|
}
|
||||||
[self injectDeferredObject:[command argumentAtIndex:0] withWrapper:jsWrapper];
|
[self injectDeferredObject:[command argumentAtIndex:0] withWrapper:jsWrapper];
|
||||||
}
|
}
|
||||||
@@ -390,12 +405,13 @@
|
|||||||
|
|
||||||
@synthesize currentURL;
|
@synthesize currentURL;
|
||||||
|
|
||||||
- (id)initWithUserAgent:(NSString*)userAgent prevUserAgent:(NSString*)prevUserAgent
|
- (id)initWithUserAgent:(NSString*)userAgent prevUserAgent:(NSString*)prevUserAgent browserOptions: (CDVInAppBrowserOptions*) browserOptions
|
||||||
{
|
{
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self != nil) {
|
if (self != nil) {
|
||||||
_userAgent = userAgent;
|
_userAgent = userAgent;
|
||||||
_prevUserAgent = prevUserAgent;
|
_prevUserAgent = prevUserAgent;
|
||||||
|
_browserOptions = browserOptions;
|
||||||
_webViewDelegate = [[CDVWebViewDelegate alloc] initWithDelegate:self];
|
_webViewDelegate = [[CDVWebViewDelegate alloc] initWithDelegate:self];
|
||||||
[self createViews];
|
[self createViews];
|
||||||
}
|
}
|
||||||
@@ -408,10 +424,10 @@
|
|||||||
// We create the views in code for primarily for ease of upgrades and not requiring an external .xib to be included
|
// We create the views in code for primarily for ease of upgrades and not requiring an external .xib to be included
|
||||||
|
|
||||||
CGRect webViewBounds = self.view.bounds;
|
CGRect webViewBounds = self.view.bounds;
|
||||||
|
BOOL toolbarIsAtBottom = ![_browserOptions.toolbarposition isEqualToString:kInAppBrowserToolbarBarPositionTop];
|
||||||
webViewBounds.size.height -= FOOTER_HEIGHT;
|
webViewBounds.size.height -= _browserOptions.location ? FOOTER_HEIGHT : TOOLBAR_HEIGHT;
|
||||||
|
|
||||||
self.webView = [[UIWebView alloc] initWithFrame:webViewBounds];
|
self.webView = [[UIWebView alloc] initWithFrame:webViewBounds];
|
||||||
|
|
||||||
self.webView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
|
self.webView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
|
||||||
|
|
||||||
[self.view addSubview:self.webView];
|
[self.view addSubview:self.webView];
|
||||||
@@ -453,10 +469,13 @@
|
|||||||
UIBarButtonItem* fixedSpaceButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
|
UIBarButtonItem* fixedSpaceButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
|
||||||
fixedSpaceButton.width = 20;
|
fixedSpaceButton.width = 20;
|
||||||
|
|
||||||
self.toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0.0, (self.view.bounds.size.height - TOOLBAR_HEIGHT), self.view.bounds.size.width, TOOLBAR_HEIGHT)];
|
float toolbarY = toolbarIsAtBottom ? self.view.bounds.size.height - TOOLBAR_HEIGHT : 0.0;
|
||||||
|
CGRect toolbarFrame = CGRectMake(0.0, toolbarY, self.view.bounds.size.width, TOOLBAR_HEIGHT);
|
||||||
|
|
||||||
|
self.toolbar = [[UIToolbar alloc] initWithFrame:toolbarFrame];
|
||||||
self.toolbar.alpha = 1.000;
|
self.toolbar.alpha = 1.000;
|
||||||
self.toolbar.autoresizesSubviews = YES;
|
self.toolbar.autoresizesSubviews = YES;
|
||||||
self.toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin;
|
self.toolbar.autoresizingMask = toolbarIsAtBottom ? (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin) : UIViewAutoresizingFlexibleWidth;
|
||||||
self.toolbar.barStyle = UIBarStyleBlackOpaque;
|
self.toolbar.barStyle = UIBarStyleBlackOpaque;
|
||||||
self.toolbar.clearsContextBeforeDrawing = NO;
|
self.toolbar.clearsContextBeforeDrawing = NO;
|
||||||
self.toolbar.clipsToBounds = NO;
|
self.toolbar.clipsToBounds = NO;
|
||||||
@@ -468,7 +487,9 @@
|
|||||||
self.toolbar.userInteractionEnabled = YES;
|
self.toolbar.userInteractionEnabled = YES;
|
||||||
|
|
||||||
CGFloat labelInset = 5.0;
|
CGFloat labelInset = 5.0;
|
||||||
self.addressLabel = [[UILabel alloc] initWithFrame:CGRectMake(labelInset, (self.view.bounds.size.height - FOOTER_HEIGHT), self.view.bounds.size.width - labelInset, LOCATIONBAR_HEIGHT)];
|
float locationBarY = toolbarIsAtBottom ? self.view.bounds.size.height - FOOTER_HEIGHT : self.view.bounds.size.height - LOCATIONBAR_HEIGHT;
|
||||||
|
|
||||||
|
self.addressLabel = [[UILabel alloc] initWithFrame:CGRectMake(labelInset, locationBarY, self.view.bounds.size.width - labelInset, LOCATIONBAR_HEIGHT)];
|
||||||
self.addressLabel.adjustsFontSizeToFitWidth = NO;
|
self.addressLabel.adjustsFontSizeToFitWidth = NO;
|
||||||
self.addressLabel.alpha = 1.000;
|
self.addressLabel.alpha = 1.000;
|
||||||
self.addressLabel.autoresizesSubviews = YES;
|
self.addressLabel.autoresizesSubviews = YES;
|
||||||
@@ -487,17 +508,17 @@
|
|||||||
self.addressLabel.numberOfLines = 1;
|
self.addressLabel.numberOfLines = 1;
|
||||||
self.addressLabel.opaque = NO;
|
self.addressLabel.opaque = NO;
|
||||||
self.addressLabel.shadowOffset = CGSizeMake(0.0, -1.0);
|
self.addressLabel.shadowOffset = CGSizeMake(0.0, -1.0);
|
||||||
self.addressLabel.text = @"Loading...";
|
self.addressLabel.text = NSLocalizedString(@"Loading...", nil);
|
||||||
self.addressLabel.textAlignment = UITextAlignmentLeft;
|
self.addressLabel.textAlignment = UITextAlignmentLeft;
|
||||||
self.addressLabel.textColor = [UIColor colorWithWhite:1.000 alpha:1.000];
|
self.addressLabel.textColor = [UIColor colorWithWhite:1.000 alpha:1.000];
|
||||||
self.addressLabel.userInteractionEnabled = NO;
|
self.addressLabel.userInteractionEnabled = NO;
|
||||||
|
|
||||||
NSString* frontArrowString = @"►"; // create arrow from Unicode char
|
NSString* frontArrowString = NSLocalizedString(@"►", nil); // create arrow from Unicode char
|
||||||
self.forwardButton = [[UIBarButtonItem alloc] initWithTitle:frontArrowString style:UIBarButtonItemStylePlain target:self action:@selector(goForward:)];
|
self.forwardButton = [[UIBarButtonItem alloc] initWithTitle:frontArrowString style:UIBarButtonItemStylePlain target:self action:@selector(goForward:)];
|
||||||
self.forwardButton.enabled = YES;
|
self.forwardButton.enabled = YES;
|
||||||
self.forwardButton.imageInsets = UIEdgeInsetsZero;
|
self.forwardButton.imageInsets = UIEdgeInsetsZero;
|
||||||
|
|
||||||
NSString* backArrowString = @"◄"; // create arrow from Unicode char
|
NSString* backArrowString = NSLocalizedString(@"◄", nil); // create arrow from Unicode char
|
||||||
self.backButton = [[UIBarButtonItem alloc] initWithTitle:backArrowString style:UIBarButtonItemStylePlain target:self action:@selector(goBack:)];
|
self.backButton = [[UIBarButtonItem alloc] initWithTitle:backArrowString style:UIBarButtonItemStylePlain target:self action:@selector(goBack:)];
|
||||||
self.backButton.enabled = YES;
|
self.backButton.enabled = YES;
|
||||||
self.backButton.imageInsets = UIEdgeInsetsZero;
|
self.backButton.imageInsets = UIEdgeInsetsZero;
|
||||||
@@ -510,6 +531,11 @@
|
|||||||
[self.view addSubview:self.spinner];
|
[self.view addSubview:self.spinner];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void) setWebViewFrame : (CGRect) frame {
|
||||||
|
NSLog(@"Setting the WebView's frame to %@", NSStringFromCGRect(frame));
|
||||||
|
[self.webView setFrame:frame];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)setCloseButtonTitle:(NSString*)title
|
- (void)setCloseButtonTitle:(NSString*)title
|
||||||
{
|
{
|
||||||
// the advantage of using UIBarButtonSystemItemDone is the system will localize it for you automatically
|
// the advantage of using UIBarButtonSystemItemDone is the system will localize it for you automatically
|
||||||
@@ -544,7 +570,7 @@
|
|||||||
|
|
||||||
CGRect webViewBounds = self.view.bounds;
|
CGRect webViewBounds = self.view.bounds;
|
||||||
webViewBounds.size.height -= FOOTER_HEIGHT;
|
webViewBounds.size.height -= FOOTER_HEIGHT;
|
||||||
self.webView.frame = webViewBounds;
|
[self setWebViewFrame:webViewBounds];
|
||||||
|
|
||||||
locationbarFrame.origin.y = webViewBounds.size.height;
|
locationbarFrame.origin.y = webViewBounds.size.height;
|
||||||
self.addressLabel.frame = locationbarFrame;
|
self.addressLabel.frame = locationbarFrame;
|
||||||
@@ -553,7 +579,7 @@
|
|||||||
|
|
||||||
CGRect webViewBounds = self.view.bounds;
|
CGRect webViewBounds = self.view.bounds;
|
||||||
webViewBounds.size.height -= LOCATIONBAR_HEIGHT;
|
webViewBounds.size.height -= LOCATIONBAR_HEIGHT;
|
||||||
self.webView.frame = webViewBounds;
|
[self setWebViewFrame:webViewBounds];
|
||||||
|
|
||||||
locationbarFrame.origin.y = webViewBounds.size.height;
|
locationbarFrame.origin.y = webViewBounds.size.height;
|
||||||
self.addressLabel.frame = locationbarFrame;
|
self.addressLabel.frame = locationbarFrame;
|
||||||
@@ -567,17 +593,15 @@
|
|||||||
// webView take up whole height less toolBar height
|
// webView take up whole height less toolBar height
|
||||||
CGRect webViewBounds = self.view.bounds;
|
CGRect webViewBounds = self.view.bounds;
|
||||||
webViewBounds.size.height -= TOOLBAR_HEIGHT;
|
webViewBounds.size.height -= TOOLBAR_HEIGHT;
|
||||||
self.webView.frame = webViewBounds;
|
[self setWebViewFrame:webViewBounds];
|
||||||
} else {
|
} else {
|
||||||
// no toolBar, expand webView to screen dimensions
|
// no toolBar, expand webView to screen dimensions
|
||||||
|
[self setWebViewFrame:self.view.bounds];
|
||||||
CGRect webViewBounds = self.view.bounds;
|
|
||||||
self.webView.frame = webViewBounds;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)showToolBar:(BOOL)show
|
- (void)showToolBar:(BOOL)show : (NSString *) toolbarPosition
|
||||||
{
|
{
|
||||||
CGRect toolbarFrame = self.toolbar.frame;
|
CGRect toolbarFrame = self.toolbar.frame;
|
||||||
CGRect locationbarFrame = self.addressLabel.frame;
|
CGRect locationbarFrame = self.addressLabel.frame;
|
||||||
@@ -591,30 +615,31 @@
|
|||||||
|
|
||||||
if (show) {
|
if (show) {
|
||||||
self.toolbar.hidden = NO;
|
self.toolbar.hidden = NO;
|
||||||
|
CGRect webViewBounds = self.view.bounds;
|
||||||
|
|
||||||
if (locationbarVisible) {
|
if (locationbarVisible) {
|
||||||
// locationBar at the bottom, move locationBar up
|
// locationBar at the bottom, move locationBar up
|
||||||
// put toolBar at the bottom
|
// put toolBar at the bottom
|
||||||
|
|
||||||
CGRect webViewBounds = self.view.bounds;
|
|
||||||
webViewBounds.size.height -= FOOTER_HEIGHT;
|
webViewBounds.size.height -= FOOTER_HEIGHT;
|
||||||
self.webView.frame = webViewBounds;
|
|
||||||
|
|
||||||
locationbarFrame.origin.y = webViewBounds.size.height;
|
locationbarFrame.origin.y = webViewBounds.size.height;
|
||||||
self.addressLabel.frame = locationbarFrame;
|
self.addressLabel.frame = locationbarFrame;
|
||||||
|
|
||||||
toolbarFrame.origin.y = (webViewBounds.size.height + LOCATIONBAR_HEIGHT);
|
|
||||||
self.toolbar.frame = toolbarFrame;
|
self.toolbar.frame = toolbarFrame;
|
||||||
} else {
|
} else {
|
||||||
// no locationBar, so put toolBar at the bottom
|
// no locationBar, so put toolBar at the bottom
|
||||||
|
|
||||||
CGRect webViewBounds = self.view.bounds;
|
CGRect webViewBounds = self.view.bounds;
|
||||||
webViewBounds.size.height -= TOOLBAR_HEIGHT;
|
webViewBounds.size.height -= TOOLBAR_HEIGHT;
|
||||||
self.webView.frame = webViewBounds;
|
|
||||||
|
|
||||||
toolbarFrame.origin.y = webViewBounds.size.height;
|
|
||||||
self.toolbar.frame = toolbarFrame;
|
self.toolbar.frame = toolbarFrame;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ([toolbarPosition isEqualToString:kInAppBrowserToolbarBarPositionTop]) {
|
||||||
|
toolbarFrame.origin.y = 0;
|
||||||
|
webViewBounds.origin.y += toolbarFrame.size.height;
|
||||||
|
[self setWebViewFrame:webViewBounds];
|
||||||
|
} else {
|
||||||
|
toolbarFrame.origin.y = (webViewBounds.size.height + LOCATIONBAR_HEIGHT);
|
||||||
|
}
|
||||||
|
[self setWebViewFrame:webViewBounds];
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
self.toolbar.hidden = YES;
|
self.toolbar.hidden = YES;
|
||||||
|
|
||||||
@@ -625,16 +650,14 @@
|
|||||||
// webView take up whole height less locationBar height
|
// webView take up whole height less locationBar height
|
||||||
CGRect webViewBounds = self.view.bounds;
|
CGRect webViewBounds = self.view.bounds;
|
||||||
webViewBounds.size.height -= LOCATIONBAR_HEIGHT;
|
webViewBounds.size.height -= LOCATIONBAR_HEIGHT;
|
||||||
self.webView.frame = webViewBounds;
|
[self setWebViewFrame:webViewBounds];
|
||||||
|
|
||||||
// move locationBar down
|
// move locationBar down
|
||||||
locationbarFrame.origin.y = webViewBounds.size.height;
|
locationbarFrame.origin.y = webViewBounds.size.height;
|
||||||
self.addressLabel.frame = locationbarFrame;
|
self.addressLabel.frame = locationbarFrame;
|
||||||
} else {
|
} else {
|
||||||
// no locationBar, expand webView to screen dimensions
|
// no locationBar, expand webView to screen dimensions
|
||||||
|
[self setWebViewFrame:self.view.bounds];
|
||||||
CGRect webViewBounds = self.view.bounds;
|
|
||||||
self.webView.frame = webViewBounds;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -703,17 +726,36 @@
|
|||||||
if (IsAtLeastiOSVersion(@"7.0")) {
|
if (IsAtLeastiOSVersion(@"7.0")) {
|
||||||
[[UIApplication sharedApplication] setStatusBarStyle:[self preferredStatusBarStyle]];
|
[[UIApplication sharedApplication] setStatusBarStyle:[self preferredStatusBarStyle]];
|
||||||
}
|
}
|
||||||
|
[self rePositionViews];
|
||||||
|
|
||||||
[super viewWillAppear:animated];
|
[super viewWillAppear:animated];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// On iOS 7 the status bar is part of the view's dimensions, therefore it's height has to be taken into account.
|
||||||
|
// The height of it could be hardcoded as 20 pixels, but that would assume that the upcoming releases of iOS won't
|
||||||
|
// change that value.
|
||||||
|
//
|
||||||
|
- (float) getStatusBarOffset {
|
||||||
|
CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
|
||||||
|
float statusBarOffset = IsAtLeastiOSVersion(@"7.0") ? MIN(statusBarFrame.size.width, statusBarFrame.size.height) : 0.0;
|
||||||
|
return statusBarOffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) rePositionViews {
|
||||||
|
if ([_browserOptions.toolbarposition isEqualToString:kInAppBrowserToolbarBarPositionTop]) {
|
||||||
|
[self.webView setFrame:CGRectMake(self.webView.frame.origin.x, TOOLBAR_HEIGHT, self.webView.frame.size.width, self.webView.frame.size.height)];
|
||||||
|
[self.toolbar setFrame:CGRectMake(self.toolbar.frame.origin.x, [self getStatusBarOffset], self.toolbar.frame.size.width, self.toolbar.frame.size.height)];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark UIWebViewDelegate
|
#pragma mark UIWebViewDelegate
|
||||||
|
|
||||||
- (void)webViewDidStartLoad:(UIWebView*)theWebView
|
- (void)webViewDidStartLoad:(UIWebView*)theWebView
|
||||||
{
|
{
|
||||||
// loading url, start spinner, update back/forward
|
// loading url, start spinner, update back/forward
|
||||||
|
|
||||||
self.addressLabel.text = @"Loading...";
|
self.addressLabel.text = NSLocalizedString(@"Loading...", nil);
|
||||||
self.backButton.enabled = theWebView.canGoBack;
|
self.backButton.enabled = theWebView.canGoBack;
|
||||||
self.forwardButton.enabled = theWebView.canGoForward;
|
self.forwardButton.enabled = theWebView.canGoForward;
|
||||||
|
|
||||||
@@ -764,13 +806,13 @@
|
|||||||
- (void)webView:(UIWebView*)theWebView didFailLoadWithError:(NSError*)error
|
- (void)webView:(UIWebView*)theWebView didFailLoadWithError:(NSError*)error
|
||||||
{
|
{
|
||||||
// log fail message, stop spinner, update back/forward
|
// log fail message, stop spinner, update back/forward
|
||||||
NSLog(@"webView:didFailLoadWithError - %@", [error localizedDescription]);
|
NSLog(@"webView:didFailLoadWithError - %i: %@", error.code, [error localizedDescription]);
|
||||||
|
|
||||||
self.backButton.enabled = theWebView.canGoBack;
|
self.backButton.enabled = theWebView.canGoBack;
|
||||||
self.forwardButton.enabled = theWebView.canGoForward;
|
self.forwardButton.enabled = theWebView.canGoForward;
|
||||||
[self.spinner stopAnimating];
|
[self.spinner stopAnimating];
|
||||||
|
|
||||||
self.addressLabel.text = @"Load Error";
|
self.addressLabel.text = NSLocalizedString(@"Load Error", nil);
|
||||||
|
|
||||||
[self.navigationDelegate webView:theWebView didFailLoadWithError:error];
|
[self.navigationDelegate webView:theWebView didFailLoadWithError:error];
|
||||||
}
|
}
|
||||||
@@ -814,6 +856,7 @@
|
|||||||
self.location = YES;
|
self.location = YES;
|
||||||
self.toolbar = YES;
|
self.toolbar = YES;
|
||||||
self.closebuttoncaption = nil;
|
self.closebuttoncaption = nil;
|
||||||
|
self.toolbarposition = kInAppBrowserToolbarBarPositionBottom;
|
||||||
|
|
||||||
self.enableviewportscale = NO;
|
self.enableviewportscale = NO;
|
||||||
self.mediaplaybackrequiresuseraction = NO;
|
self.mediaplaybackrequiresuseraction = NO;
|
||||||
@@ -821,6 +864,7 @@
|
|||||||
self.keyboarddisplayrequiresuseraction = YES;
|
self.keyboarddisplayrequiresuseraction = YES;
|
||||||
self.suppressesincrementalrendering = NO;
|
self.suppressesincrementalrendering = NO;
|
||||||
self.hidden = NO;
|
self.hidden = NO;
|
||||||
|
self.disallowoverscroll = NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
|
|||||||
Reference in New Issue
Block a user