Compare commits

..

38 Commits
1.7.0 ... 1.7.2

Author SHA1 Message Date
Steve Gill
b9c577044c CB-13542 Updated version and RELEASENOTES.md for release 1.7.2 (via coho) 2017-11-06 14:37:45 -08:00
Alexander Sorokin
cc2299e1c3 CB-13473: (CI) Removed browser builds from AppVeyor 2017-10-20 10:22:46 +03:00
Alexander Sorokin
7fb19f6bdc CB-13472: (CI) Fixed Travis Android builds again 2017-10-20 08:59:05 +03:00
Joe Bowser
71201b10a6 Updating travis to fix CI issues 2017-09-27 10:03:13 -07:00
Joe Bowser
50ac05ca41 Close #165 2017-09-27 09:59:08 -07:00
Kei Oikawa
dcc00fc3bd CB-13347: Enable thirdparty cookies on >=Android 5.0 device 2017-09-27 09:57:43 -07:00
Joe Bowser
e9878ddecd Close #240 2017-09-27 09:49:06 -07:00
Jez McKean
aee699a0e5 minor grammar fix
This closes #241
2017-09-27 09:46:47 -07:00
Joe Bowser
d78cfdc4d4 Close #220 2017-09-21 09:39:38 -07:00
Joe Bowser
bf6945feb0 Close #201 2017-09-21 09:36:57 -07:00
Joe Bowser
ad4a0a3120 Close #221 2017-09-21 09:35:55 -07:00
Joe Bowser
3882924c4a Close #172 2017-09-21 09:32:57 -07:00
Joe Bowser
6eb9bbbf75 Close #156 2017-09-21 09:26:57 -07:00
Joe Bowser
7ac56842aa Close #116 2017-09-21 09:19:22 -07:00
Joe Bowser
dbf3316df3 Close #77 2017-09-21 09:10:08 -07:00
Joe Bowser
171e7dfea7 Close #73 2017-09-21 09:09:01 -07:00
Joe Bowser
6ea100a9fe Close #62 2017-09-21 09:05:30 -07:00
Alexander Sorokin
bfe8763918 CB-13299 (CI) Fix Android builds 2017-09-19 09:06:34 +03:00
Audrey So
902427525f CB-12895 : added eslint and removed jshint 2017-08-29 15:13:21 -07:00
Jan Piotrowski
7611645469 CB-12975 (docs) Resort and reword cordova.InAppBrowser.open options lists
for better developer experience
2017-08-01 11:55:59 -07:00
Alexander Sorokin
72ac4d7eca CB-13028 (CI) Browser builds on Travis and AppVeyor, Fixes tests on browser and browser implementation 2017-07-27 15:55:11 +03:00
Julio César
32d867f8e4 CB-12586 (iOS) fix method hide doesn't work
This closes #229
2017-07-23 19:02:19 +02:00
Julio César
6e058624d6 CB-13035 fix Create issue Link
This closes #228
2017-07-23 18:59:52 +02:00
Alexander Sorokin
ed139eeb34 CB-13000: (CI) Speed up android builds 2017-07-10 10:34:27 +03:00
Alexander Sorokin
aa82a5d6c8 CB-12991: (CI) Updated CI badges 2017-07-07 10:54:24 +03:00
Alexander Sorokin
15685d7a21 CB-12935: (windows) Enable paramedic builds on AppVeyor 2017-06-30 09:31:52 +03:00
Alexander Sorokin
4f144d9e82 CB-12935: (ios, android) Enable paramedic builds on Travis CI 2017-06-26 13:31:31 +03:00
Nikita Matrosov
b6ed0bbaca Add 'hide' method in typing definitions 2017-06-07 16:13:16 +03:00
filmaj
711c605212 CB-12847: added bugs entry to package.json. 2017-05-25 12:45:34 +02:00
filmaj
c630159c22 Set VERSION to 1.7.2-dev (via coho) 2017-04-27 12:51:10 -07:00
filmaj
ff6a765fac CB-12736 Updated version and RELEASENOTES.md for release 1.7.1 (via coho) 2017-04-27 12:51:08 -07:00
Alexander Sorokin
531a508c0d CB-12622: Added Android 6.0 build badges to README 2017-04-26 16:07:45 +03:00
filmaj
bfb33988be CB-12266: (browser platform) loadstop event.url is now a string instead of an object, aligning it with the other platforms. 2017-04-25 16:19:48 -07:00
Steve Gill
b923e88b23 CB-12685: added package.json to tests folder 2017-04-21 19:21:11 -07:00
daserge
c9ff78abfd CB-11248 InAppBrowser no focus on input text fields 2017-03-20 12:21:04 +03:00
Steve Gill
0f5de8524f CB-12519 updated incorrect version in RELEASENOTES.md 2017-03-02 16:42:02 -08:00
Steve Gill
0ddc31d3f4 Set VERSION to 1.7.1-dev (via coho) 2017-03-02 14:46:15 -08:00
Steve Gill
a74510ba00 CB-12519 Updated version and RELEASENOTES.md for release 1.7.0 2017-02-28 17:41:27 -08:00
22 changed files with 568 additions and 391 deletions

28
.appveyor.yml Normal file
View File

@@ -0,0 +1,28 @@
# appveyor file
# http://www.appveyor.com/docs/appveyor-yml
max_jobs: 1
shallow_clone: true
init:
- git config --global core.autocrlf true
image:
- Visual Studio 2017
environment:
nodejs_version: "4"
matrix:
- PLATFORM: windows-10-store
JUST_BUILD: --justBuild
install:
- npm cache clean -f
- node --version
- npm install -g cordova-paramedic@https://github.com/apache/cordova-paramedic.git
- npm install -g cordova
build: off
test_script:
- cordova-paramedic --config pr\%PLATFORM% --plugin . %JUST_BUILD%

10
.eslintrc.yml Normal file
View File

@@ -0,0 +1,10 @@
root: true
extends: semistandard
rules:
indent:
- error
- 4
camelcase: off
padded-blocks: off
operator-linebreak: off
no-throw-literal: off

View File

@@ -1,16 +0,0 @@
{
"browser": true
, "devel": true
, "bitwise": true
, "undef": true
, "trailing": true
, "quotmark": false
, "indent": 4
, "unused": "vars"
, "latedef": "nofunc"
, "globals": {
"module": false,
"exports": false,
"require": false
}
}

View File

@@ -1,4 +1,90 @@
language: node_js
sudo: false sudo: false
node_js: addons:
- "4.2" jwt:
secure: TZ88IEvAw1bsWPWxvDzXdpi2NK0i3PN4hG15+vDpIt6wXGVPknjxuXWJeLj7TqBpAIvP7XDfS8ZvHVPLe7fe8oOchZPLuiDw9VVIk6cnHjE6wpoavdGc/1mDJ3Bi4PDcHwRUr5ng5spYQqqlTwcECkH/q7iPgudiFM6rlOlGRyA=
env:
global:
- SAUCE_USERNAME=snay
- TRAVIS_NODE_VERSION="4.2"
matrix:
include:
- env: PLATFORM=browser-chrome
os: linux
language: node_js
node_js: '4.2'
- env: PLATFORM=browser-firefox
os: linux
language: node_js
node_js: '4.2'
- env: PLATFORM=browser-safari
os: linux
language: node_js
node_js: '4.2'
- env: PLATFORM=browser-edge
os: linux
language: node_js
node_js: '4.2'
- env: PLATFORM=ios-9.3
os: osx
osx_image: xcode7.3
language: node_js
node_js: '4.2'
- env: PLATFORM=ios-10.0
os: osx
osx_image: xcode7.3
language: node_js
node_js: '4.2'
- env: PLATFORM=android-4.4
os: linux
language: android
jdk: oraclejdk8
android:
components:
- tools
- platform-tools
- tools
- env: PLATFORM=android-5.1
os: linux
language: android
jdk: oraclejdk8
android:
components:
- tools
- platform-tools
- tools
- env: PLATFORM=android-6.0
os: linux
language: android
jdk: oraclejdk8
android:
components:
- tools
- platform-tools
- tools
- env: PLATFORM=android-7.0
os: linux
language: android
jdk: oraclejdk8
android:
components:
- tools
- platform-tools
- tools
before_install:
- rm -rf ~/.nvm && git clone https://github.com/creationix/nvm.git ~/.nvm && (cd ~/.nvm
&& git checkout `git describe --abbrev=0 --tags`) && source ~/.nvm/nvm.sh && nvm
install $TRAVIS_NODE_VERSION
- node --version
- if [[ "$PLATFORM" =~ android ]]; then gradle --version; fi
- if [[ "$PLATFORM" =~ ios ]]; then npm install -g ios-deploy; fi
- if [[ "$PLATFORM" =~ android ]]; then echo y | android update sdk -u --filter android-22,android-23,android-24,android-25,android-26;
fi
- git clone https://github.com/apache/cordova-paramedic /tmp/paramedic && pushd /tmp/paramedic
&& npm install && popd
- npm install -g cordova
install:
- npm install
script:
- npm test
- node /tmp/paramedic/main.js --config pr/$PLATFORM --plugin $(pwd) --shouldUseSauce
--buildName travis-plugin-inappbrowser-$TRAVIS_JOB_NUMBER

View File

@@ -21,9 +21,9 @@ description: Open an in-app browser window.
# under the License. # under the License.
--> -->
|Android 4.4|Android 5.1|iOS 9.3|iOS 10.0|Windows 10 Store|Travis CI| |AppVeyor|Travis CI|
|:-:|:-:|:-:|:-:|:-:|:-:| |:-:|:-:|
|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=android-4.4,PLUGIN=cordova-plugin-inappbrowser)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=android-4.4,PLUGIN=cordova-plugin-inappbrowser/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=android-5.1,PLUGIN=cordova-plugin-inappbrowser)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=android-5.1,PLUGIN=cordova-plugin-inappbrowser/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=ios-9.3,PLUGIN=cordova-plugin-inappbrowser)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=ios-9.3,PLUGIN=cordova-plugin-inappbrowser/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=ios-10.0,PLUGIN=cordova-plugin-inappbrowser)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=ios-10.0,PLUGIN=cordova-plugin-inappbrowser/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-10-store,PLUGIN=cordova-plugin-inappbrowser)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-10-store,PLUGIN=cordova-plugin-inappbrowser/)|[![Build Status](https://travis-ci.org/apache/cordova-plugin-inappbrowser.svg?branch=master)](https://travis-ci.org/apache/cordova-plugin-inappbrowser)| |[![Build status](https://ci.appveyor.com/api/projects/status/github/apache/cordova-plugin-inappbrowser?branch=master)](https://ci.appveyor.com/project/ApacheSoftwareFoundation/cordova-plugin-inappbrowser)|[![Build Status](https://travis-ci.org/apache/cordova-plugin-inappbrowser.svg?branch=master)](https://travis-ci.org/apache/cordova-plugin-inappbrowser)|
# cordova-plugin-inappbrowser # cordova-plugin-inappbrowser
@@ -57,7 +57,7 @@ plugin). The hook of `window.open` will be removed in a future major release.
Until the hook is removed from the plugin, apps can manually restore the default Until the hook is removed from the plugin, apps can manually restore the default
behaviour: behaviour:
delete window.open // Reverts the call back to it's prototype's default delete window.open // Reverts the call back to its prototype's default
Although `window.open` is in the global scope, InAppBrowser is not available until after the `deviceready` event. Although `window.open` is in the global scope, InAppBrowser is not available until after the `deviceready` event.
@@ -66,7 +66,7 @@ Although `window.open` is in the global scope, InAppBrowser is not available unt
console.log("window.open works well"); console.log("window.open works well");
} }
Report issues with this plugin on the [Apache Cordova issue tracker](https://issues.apache.org/jira/issues/?jql=project%20%3D%20CB%20AND%20status%20in%20%28Open%2C%20%22In%20Progress%22%2C%20Reopened%29%20AND%20resolution%20%3D%20Unresolved%20AND%20component%20%3D%20%22Plugin%20InAppBrowser%22%20ORDER%20BY%20priority%20DESC%2C%20summary%20ASC%2C%20updatedDate%20DESC) Report issues with this plugin on the [Apache Cordova issue tracker](https://issues.apache.org/jira/issues/?jql=project%20%3D%20CB%20AND%20status%20in%20%28Open%2C%20%22In%20Progress%22%2C%20Reopened%29%20AND%20resolution%20%3D%20Unresolved%20AND%20component%20%3D%20%22cordova-plugin-inappbrowser%22%20ORDER%20BY%20priority%20DESC%2C%20summary%20ASC%2C%20updatedDate%20DESC)
## <a id="reference">Reference</a> ## <a id="reference">Reference</a>
@@ -101,28 +101,30 @@ instance, or the system browser.
- __options__: Options for the `InAppBrowser`. Optional, defaulting to: `location=yes`. _(String)_ - __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: 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:
- __location__: Set to `yes` or `no` to turn the `InAppBrowser`'s location bar on or off. - __location__: Set to `yes` or `no` to turn the `InAppBrowser`'s location bar on or off.
Android only: Android supports these additional options:
- __hidden__: set to `yes` to create the browser and load the page, but not show it. The loadstop event fires when loading is complete. Omit or set to `no` (default) to have the browser open and load normally. - __hidden__: set to `yes` to create the browser and load the page, but not show it. The loadstop 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 - __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 - __clearsessioncache__: set to `yes` to have the session cookie cache cleared before the new window is opened
- __zoom__: set to `yes` to show Android browser's zoom controls, set to `no` to hide them. Default value is `yes`.
- __hardwareback__: set to `yes` to use the hardware back button to navigate backwards through the `InAppBrowser`'s history. If there is no previous page, the `InAppBrowser` will close. The default value is `yes`, so you must set it to `no` if you want the back button to simply close the InAppBrowser. - __hardwareback__: set to `yes` to use the hardware back button to navigate backwards through the `InAppBrowser`'s history. If there is no previous page, the `InAppBrowser` will close. The default value is `yes`, so you must set it to `no` if you want the back button to simply close the InAppBrowser.
- __zoom__: set to `yes` to show Android browser's zoom controls, set to `no` to hide them. Default value is `yes`.
- __mediaPlaybackRequiresUserAction__: Set to `yes` to prevent HTML5 audio or video from autoplaying (defaults to `no`). - __mediaPlaybackRequiresUserAction__: Set to `yes` to prevent HTML5 audio or video from autoplaying (defaults to `no`).
- __shouldPauseOnSuspend__: Set to `yes` to make InAppBrowser WebView to pause/resume with the app to stop background audio (this may be required to avoid Google Play issues like described in [CB-11013](https://issues.apache.org/jira/browse/CB-11013)). - __shouldPauseOnSuspend__: Set to `yes` to make InAppBrowser WebView to pause/resume with the app to stop background audio (this may be required to avoid Google Play issues like described in [CB-11013](https://issues.apache.org/jira/browse/CB-11013)).
- __useWideViewPort__: Sets whether the WebView should enable support for the "viewport" HTML meta tag or should use a wide viewport. When the value of the setting is `no`, the layout width is always set to the width of the WebView control in device-independent (CSS) pixels. When the value is `yes` and the page contains the viewport meta tag, the value of the width specified in the tag is used. If the page does not contain the tag or does not provide a width, then a wide viewport will be used. (defaults to `yes`). - __useWideViewPort__: Sets whether the WebView should enable support for the "viewport" HTML meta tag or should use a wide viewport. When the value of the setting is `no`, the layout width is always set to the width of the WebView control in device-independent (CSS) pixels. When the value is `yes` and the page contains the viewport meta tag, the value of the width specified in the tag is used. If the page does not contain the tag or does not provide a width, then a wide viewport will be used. (defaults to `yes`).
iOS only: iOS supports these additional options:
- __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 loadstop event fires when loading is complete. Omit or set to `no` (default) to have the browser open and load normally. - __hidden__: set to `yes` to create the browser and load the page, but not show it. The loadstop 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 - __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 - __clearsessioncache__: set to `yes` to have the session cookie cache cleared before the new window is opened
- __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.
- __toolbar__: set to `yes` or `no` to turn the toolbar on or off for the InAppBrowser (defaults to `yes`) - __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`). - __enableViewportScale__: Set to `yes` or `no` to prevent viewport scaling through a meta tag (defaults to `no`).
- __mediaPlaybackRequiresUserAction__: Set to `yes` to prevent HTML5 audio or video from autoplaying (defaults to `no`). - __mediaPlaybackRequiresUserAction__: Set to `yes` to prevent HTML5 audio or video from autoplaying (defaults to `no`).
@@ -133,23 +135,24 @@ instance, or the system browser.
- __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`). - __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. - __toolbarposition__: Set to `top` or `bottom` (default is `bottom`). Causes the toolbar to be at the top or bottom of the window.
Windows only: Windows supports these additional options:
- __hidden__: set to `yes` to create the browser and load the page, but not show it. The loadstop event fires when loading is complete. Omit or set to `no` (default) to have the browser open and load normally. - __hidden__: set to `yes` to create the browser and load the page, but not show it. The loadstop event fires when loading is complete. Omit or set to `no` (default) to have the browser open and load normally.
- __fullscreen__: set to `yes` to create the browser control without a border around it. Please note that if __location=no__ is also specified, there will be no control presented to user to close IAB window.
- __hardwareback__: works the same way as on Android platform. - __hardwareback__: works the same way as on Android platform.
- __fullscreen__: set to `yes` to create the browser control without a border around it. Please note that if __location=no__ is also specified, there will be no control presented to user to close IAB window.
### Supported Platforms ### Supported Platforms
- Amazon Fire OS - Amazon Fire OS
- Android - Android
- BlackBerry 10 - BlackBerry 10
- Browser
- Firefox OS - Firefox OS
- iOS - iOS
- OSX - OSX
- Windows 8 and 8.1 - Windows 8 and 8.1
- Windows Phone 7 and 8 - Windows Phone 7 and 8
- Browser
### Example ### Example
@@ -323,10 +326,10 @@ function executeScriptCallBack(params) {
- Amazon Fire OS - Amazon Fire OS
- Android - Android
- Browser
- iOS - iOS
- Windows 8 and 8.1 - Windows 8 and 8.1
- Windows Phone 7 and 8 - Windows Phone 7 and 8
- Browser
### Browser Quirks ### Browser Quirks
@@ -359,10 +362,10 @@ The function is passed an `InAppBrowserEvent` object.
- Amazon Fire OS - Amazon Fire OS
- Android - Android
- Browser
- iOS - iOS
- Windows 8 and 8.1 - Windows 8 and 8.1
- Windows Phone 7 and 8 - Windows Phone 7 and 8
- Browser
### Quick Example ### Quick Example
@@ -383,11 +386,11 @@ The function is passed an `InAppBrowserEvent` object.
- Amazon Fire OS - Amazon Fire OS
- Android - Android
- Browser
- Firefox OS - Firefox OS
- iOS - iOS
- Windows 8 and 8.1 - Windows 8 and 8.1
- Windows Phone 7 and 8 - Windows Phone 7 and 8
- Browser
### Quick Example ### Quick Example
@@ -406,9 +409,9 @@ The function is passed an `InAppBrowserEvent` object.
- Amazon Fire OS - Amazon Fire OS
- Android - Android
- Browser
- iOS - iOS
- Windows 8 and 8.1 - Windows 8 and 8.1
- Browser
### Quick Example ### Quick Example
@@ -460,9 +463,9 @@ The function is passed an `InAppBrowserEvent` object.
- Amazon Fire OS - Amazon Fire OS
- Android - Android
- Browser
- iOS - iOS
- Windows 8 and 8.1 - Windows 8 and 8.1
- Browser
### Quick Example ### Quick Example

View File

@@ -20,6 +20,21 @@
--> -->
# Release Notes # Release Notes
### 1.7.2 (Nov 06, 2017)
* [CB-13473](https://issues.apache.org/jira/browse/CB-13473) (CI) Removed **Browser** builds from AppVeyor
* [CB-13472](https://issues.apache.org/jira/browse/CB-13472) (CI) Fixed Travis **Android** builds again
* [CB-13347](https://issues.apache.org/jira/browse/CB-13347) Enable thirdparty cookies on `>=Android 5.0` device
* [CB-12895](https://issues.apache.org/jira/browse/CB-12895) added `eslint` and removed `jshint`
* [CB-12975](https://issues.apache.org/jira/browse/CB-12975) (docs) Resort and reword `cordova.InAppBrowser.open` `options` lists
* [CB-12586](https://issues.apache.org/jira/browse/CB-12586) (iOS) fix method `hide` doesn't work
* [CB-12847](https://issues.apache.org/jira/browse/CB-12847) added `bugs` entry to `package.json`.
### 1.7.1 (Apr 27, 2017)
* [CB-12622](https://issues.apache.org/jira/browse/CB-12622) Added **Android 6.0** build badges to `README`
* [CB-12266](https://issues.apache.org/jira/browse/CB-12266) (browser platform) loadstop event.url is now a string instead of an object, aligning it with the other platforms.
* [CB-12685](https://issues.apache.org/jira/browse/CB-12685) added `package.json` to tests folder
* [CB-11248](https://issues.apache.org/jira/browse/CB-11248) `InAppBrowser` no focus on input text fields
### 1.7.0 (Feb 28, 2017) ### 1.7.0 (Feb 28, 2017)
* [CB-12366](https://issues.apache.org/jira/browse/CB-12366) **iOS:** Reduce `tmpWindow` level to prevent overlapping statusbar * [CB-12366](https://issues.apache.org/jira/browse/CB-12366) **iOS:** Reduce `tmpWindow` level to prevent overlapping statusbar
* [CB-12364](https://issues.apache.org/jira/browse/CB-12364) **Windows:** `Inappbrowser` inject file manual tests are not working * [CB-12364](https://issues.apache.org/jira/browse/CB-12364) **Windows:** `Inappbrowser` inject file manual tests are not working

View File

@@ -1,6 +1,6 @@
{ {
"name": "cordova-plugin-inappbrowser", "name": "cordova-plugin-inappbrowser",
"version": "1.7.0", "version": "1.7.2",
"description": "Cordova InAppBrowser Plugin", "description": "Cordova InAppBrowser Plugin",
"types": "./types/index.d.ts", "types": "./types/index.d.ts",
"cordova": { "cordova": {
@@ -22,6 +22,9 @@
"type": "git", "type": "git",
"url": "https://github.com/apache/cordova-plugin-inappbrowser" "url": "https://github.com/apache/cordova-plugin-inappbrowser"
}, },
"bugs": {
"url": "https://issues.apache.org/jira/browse/CB"
},
"keywords": [ "keywords": [
"cordova", "cordova",
"in", "in",
@@ -41,8 +44,8 @@
"cordova-firefoxos" "cordova-firefoxos"
], ],
"scripts": { "scripts": {
"test": "npm run jshint", "test": "npm run eslint",
"jshint": "node node_modules/jshint/bin/jshint www && node node_modules/jshint/bin/jshint src && node node_modules/jshint/bin/jshint tests" "eslint": "node node_modules/eslint/bin/eslint www && node node_modules/eslint/bin/eslint src && node node_modules/eslint/bin/eslint tests"
}, },
"engines": { "engines": {
"cordovaDependencies": { "cordovaDependencies": {
@@ -57,6 +60,12 @@
"author": "Apache Software Foundation", "author": "Apache Software Foundation",
"license": "Apache-2.0", "license": "Apache-2.0",
"devDependencies": { "devDependencies": {
"jshint": "^2.6.0" "eslint": "^4.0.0",
"eslint-config-semistandard": "^11.0.0",
"eslint-config-standard": "^10.2.1",
"eslint-plugin-import": "^2.3.0",
"eslint-plugin-node": "^5.0.0",
"eslint-plugin-promise": "^3.5.0",
"eslint-plugin-standard": "^3.0.1"
} }
} }

View File

@@ -20,7 +20,7 @@
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" <plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
id="cordova-plugin-inappbrowser" id="cordova-plugin-inappbrowser"
version="1.7.0"> version="1.7.2">
<name>InAppBrowser</name> <name>InAppBrowser</name>
<description>Cordova InAppBrowser Plugin</description> <description>Cordova InAppBrowser Plugin</description>

View File

@@ -809,6 +809,11 @@ public class InAppBrowser extends CordovaPlugin {
CookieManager.getInstance().removeSessionCookie(); CookieManager.getInstance().removeSessionCookie();
} }
// Enable Thirdparty Cookies on >=Android 5.0 device
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
CookieManager.getInstance().setAcceptThirdPartyCookies(inAppWebView,true);
}
inAppWebView.loadUrl(url); inAppWebView.loadUrl(url);
inAppWebView.setId(Integer.valueOf(6)); inAppWebView.setId(Integer.valueOf(6));
inAppWebView.getSettings().setLoadWithOverviewMode(true); inAppWebView.getSettings().setLoadWithOverviewMode(true);
@@ -1046,6 +1051,10 @@ public class InAppBrowser extends CordovaPlugin {
CookieSyncManager.getInstance().sync(); CookieSyncManager.getInstance().sync();
} }
// https://issues.apache.org/jira/browse/CB-11248
view.clearFocus();
view.requestFocus();
try { try {
JSONObject obj = new JSONObject(); JSONObject obj = new JSONObject();
obj.put("type", LOAD_STOP_EVENT); obj.put("type", LOAD_STOP_EVENT);

View File

@@ -29,27 +29,43 @@ var browserWrap,
forwardButton, forwardButton,
closeButton; closeButton;
function attachNavigationEvents(element, callback) { function attachNavigationEvents (element, callback) {
var onError = function () { var onError = function () {
callback({ type: "loaderror", url: this.contentWindow.location}, {keepCallback: true}); try {
callback({ type: 'loaderror', url: this.contentWindow.location.href }, {keepCallback: true}); // eslint-disable-line standard/no-callback-literal
} catch (err) {
// blocked by CORS :\
callback({ type: 'loaderror', url: null }, {keepCallback: true}); // eslint-disable-line standard/no-callback-literal
}
}; };
element.addEventListener("pageshow", function () { element.addEventListener('pageshow', function () {
callback({ type: "loadstart", url: this.contentWindow.location}, {keepCallback: true}); try {
callback({ type: 'loadstart', url: this.contentWindow.location.href }, {keepCallback: true}); // eslint-disable-line standard/no-callback-literal
} catch (err) {
// blocked by CORS :\
callback({ type: 'loadstart', url: null }, {keepCallback: true}); // eslint-disable-line standard/no-callback-literal
}
}); });
element.addEventListener("load", function () { element.addEventListener('load', function () {
callback({ type: "loadstop", url: this.contentWindow.location}, {keepCallback: true}); try {
callback({ type: 'loadstop', url: this.contentWindow.location.href }, {keepCallback: true}); // eslint-disable-line standard/no-callback-literal
} catch (err) {
// blocked by CORS :\
callback({ type: 'loadstop', url: null }, {keepCallback: true}); // eslint-disable-line standard/no-callback-literal
}
}); });
element.addEventListener("error", onError); element.addEventListener('error', onError);
element.addEventListener("abort", onError); element.addEventListener('abort', onError);
} }
var IAB = { var IAB = {
close: function (win, lose) { close: function (win, lose) {
if (browserWrap) { if (browserWrap) {
if (win) win({ type: "exit" }); // use the "open" function callback so that the exit event is fired properly
if (IAB._win) IAB._win({ type: 'exit' });
browserWrap.parentNode.removeChild(browserWrap); browserWrap.parentNode.removeChild(browserWrap);
browserWrap = null; browserWrap = null;
@@ -59,109 +75,108 @@ var IAB = {
show: function (win, lose) { show: function (win, lose) {
if (browserWrap) { if (browserWrap) {
browserWrap.style.display = "block"; browserWrap.style.display = 'block';
} }
}, },
open: function (win, lose, args) { open: function (win, lose, args) {
var strUrl = args[0], var strUrl = args[0];
target = args[1], var target = args[1];
features = args[2]; var features = args[2];
if (target === "_self" || !target) { IAB._win = win;
if (target === '_self' || !target) {
window.location = strUrl; window.location = strUrl;
} else if (target === "_system") { } else if (target === '_system') {
modulemapper.getOriginalSymbol(window, 'window.open').call(window, strUrl, "_blank"); modulemapper.getOriginalSymbol(window, 'window.open').call(window, strUrl, '_blank');
} else { } else {
// "_blank" or anything else // "_blank" or anything else
if (!browserWrap) { if (!browserWrap) {
browserWrap = document.createElement("div"); browserWrap = document.createElement('div');
browserWrap.style.position = "absolute"; browserWrap.style.position = 'absolute';
browserWrap.style.top = "0"; browserWrap.style.top = '0';
browserWrap.style.left = "0"; browserWrap.style.left = '0';
browserWrap.style.boxSizing = "border-box"; browserWrap.style.boxSizing = 'border-box';
browserWrap.style.borderWidth = "40px"; browserWrap.style.borderWidth = '40px';
browserWrap.style.width = "100vw"; browserWrap.style.width = '100vw';
browserWrap.style.height = "100vh"; browserWrap.style.height = '100vh';
browserWrap.style.borderStyle = "solid"; browserWrap.style.borderStyle = 'solid';
browserWrap.style.borderColor = "rgba(0,0,0,0.25)"; browserWrap.style.borderColor = 'rgba(0,0,0,0.25)';
browserWrap.onclick = function () { browserWrap.onclick = function () {
setTimeout(function () { setTimeout(function () {
IAB.close(win); IAB.close();
}, 0); }, 0);
}; };
document.body.appendChild(browserWrap); document.body.appendChild(browserWrap);
} }
if (features.indexOf("hidden=yes") !== -1) { if (features.indexOf('hidden=yes') !== -1) {
browserWrap.style.display = "none"; browserWrap.style.display = 'none';
} }
popup = document.createElement("iframe"); popup = document.createElement('iframe');
popup.style.borderWidth = "0px"; popup.style.borderWidth = '0px';
popup.style.width = "100%"; popup.style.width = '100%';
browserWrap.appendChild(popup); browserWrap.appendChild(popup);
if (features.indexOf("location=yes") !== -1 || features.indexOf("location") === -1) { if (features.indexOf('location=yes') !== -1 || features.indexOf('location') === -1) {
popup.style.height = "calc(100% - 60px)"; popup.style.height = 'calc(100% - 60px)';
popup.style.marginBottom = "-4px"; popup.style.marginBottom = '-4px';
navigationButtonsDiv = document.createElement("div"); navigationButtonsDiv = document.createElement('div');
navigationButtonsDiv.style.height = "60px"; navigationButtonsDiv.style.height = '60px';
navigationButtonsDiv.style.backgroundColor = "#404040"; navigationButtonsDiv.style.backgroundColor = '#404040';
navigationButtonsDiv.style.zIndex = "999"; navigationButtonsDiv.style.zIndex = '999';
navigationButtonsDiv.onclick = function (e) { navigationButtonsDiv.onclick = function (e) {
e.cancelBubble = true; e.cancelBubble = true;
}; };
navigationButtonsDivInner = document.createElement("div"); navigationButtonsDivInner = document.createElement('div');
navigationButtonsDivInner.style.paddingTop = "10px"; navigationButtonsDivInner.style.paddingTop = '10px';
navigationButtonsDivInner.style.height = "50px"; navigationButtonsDivInner.style.height = '50px';
navigationButtonsDivInner.style.width = "160px"; navigationButtonsDivInner.style.width = '160px';
navigationButtonsDivInner.style.margin = "0 auto"; navigationButtonsDivInner.style.margin = '0 auto';
navigationButtonsDivInner.style.backgroundColor = "#404040"; navigationButtonsDivInner.style.backgroundColor = '#404040';
navigationButtonsDivInner.style.zIndex = "999"; navigationButtonsDivInner.style.zIndex = '999';
navigationButtonsDivInner.onclick = function (e) { navigationButtonsDivInner.onclick = function (e) {
e.cancelBubble = true; e.cancelBubble = true;
}; };
backButton = document.createElement('button');
backButton.style.width = '40px';
backButton.style.height = '40px';
backButton.style.borderRadius = '40px';
backButton = document.createElement("button"); backButton.innerHTML = '←';
backButton.style.width = "40px"; backButton.addEventListener('click', function (e) {
backButton.style.height = "40px"; if (popup.canGoBack) { popup.goBack(); }
backButton.style.borderRadius = "40px";
backButton.innerHTML = "←";
backButton.addEventListener("click", function (e) {
if (popup.canGoBack)
popup.goBack();
}); });
forwardButton = document.createElement("button"); forwardButton = document.createElement('button');
forwardButton.style.marginLeft = "20px"; forwardButton.style.marginLeft = '20px';
forwardButton.style.width = "40px"; forwardButton.style.width = '40px';
forwardButton.style.height = "40px"; forwardButton.style.height = '40px';
forwardButton.style.borderRadius = "40px"; forwardButton.style.borderRadius = '40px';
forwardButton.innerHTML = "→"; forwardButton.innerHTML = '→';
forwardButton.addEventListener("click", function (e) { forwardButton.addEventListener('click', function (e) {
if (popup.canGoForward) if (popup.canGoForward) { popup.goForward(); }
popup.goForward();
}); });
closeButton = document.createElement("button"); closeButton = document.createElement('button');
closeButton.style.marginLeft = "20px"; closeButton.style.marginLeft = '20px';
closeButton.style.width = "40px"; closeButton.style.width = '40px';
closeButton.style.height = "40px"; closeButton.style.height = '40px';
closeButton.style.borderRadius = "40px"; closeButton.style.borderRadius = '40px';
closeButton.innerHTML = "✖"; closeButton.innerHTML = '✖';
closeButton.addEventListener("click", function (e) { closeButton.addEventListener('click', function (e) {
setTimeout(function () { setTimeout(function () {
IAB.close(win); IAB.close();
}, 0); }, 0);
}); });
@@ -176,7 +191,7 @@ var IAB = {
browserWrap.appendChild(navigationButtonsDiv); browserWrap.appendChild(navigationButtonsDiv);
} else { } else {
popup.style.height = "100%"; popup.style.height = '100%';
} }
// start listening for navigation events // start listening for navigation events
@@ -187,8 +202,8 @@ var IAB = {
}, },
injectScriptCode: function (win, fail, args) { injectScriptCode: function (win, fail, args) {
var code = args[0], var code = args[0];
hasCallback = args[1]; var hasCallback = args[1];
if (browserWrap && popup) { if (browserWrap && popup) {
try { try {
@@ -196,7 +211,7 @@ var IAB = {
if (hasCallback) { if (hasCallback) {
win([]); win([]);
} }
} catch(e) { } catch (e) {
console.error('Error occured while trying to injectScriptCode: ' + JSON.stringify(e)); console.error('Error occured while trying to injectScriptCode: ' + JSON.stringify(e));
} }
} }
@@ -208,7 +223,7 @@ var IAB = {
if (fail) { if (fail) {
fail(msg); fail(msg);
} }
}, },
injectStyleCode: function (win, fail, args) { injectStyleCode: function (win, fail, args) {
var msg = 'Browser cordova-plugin-inappbrowser injectStyleCode is not yet implemented'; var msg = 'Browser cordova-plugin-inappbrowser injectStyleCode is not yet implemented';
@@ -229,4 +244,4 @@ var IAB = {
module.exports = IAB; module.exports = IAB;
require("cordova/exec/proxy").add("InAppBrowser", module.exports); require('cordova/exec/proxy').add('InAppBrowser', module.exports);

View File

@@ -32,7 +32,7 @@ var IABExecs = {
if (browserWrap) { if (browserWrap) {
browserWrap.parentNode.removeChild(browserWrap); browserWrap.parentNode.removeChild(browserWrap);
browserWrap = null; browserWrap = null;
if (typeof(win) == "function") win({type:'exit'}); if (typeof (win) === 'function') win({type: 'exit'});
} }
}, },
@@ -48,17 +48,17 @@ var IABExecs = {
}, },
open: function (win, lose, args) { open: function (win, lose, args) {
var strUrl = args[0], var strUrl = args[0];
target = args[1], var target = args[1];
features_string = args[2] || "location=yes", //location=yes is default var features_string = args[2] || 'location=yes'; // location=yes is default
features = {}; var features = {};
var features_list = features_string.split(','); var features_list = features_string.split(',');
features_list.forEach(function(feature) { features_list.forEach(function (feature) {
var tup = feature.split('='); var tup = feature.split('=');
if (tup[1] == 'yes') { if (tup[1] === 'yes') {
tup[1] = true; tup[1] = true;
} else if (tup[1] == 'no') { } else if (tup[1] === 'no') {
tup[1] = false; tup[1] = false;
} else { } else {
var number = parseInt(tup[1]); var number = parseInt(tup[1]);
@@ -68,8 +68,7 @@ var IABExecs = {
} }
features[tup[0]] = tup[1]; features[tup[0]] = tup[1];
}); });
function updateIframeSizeNoLocation () {
function updateIframeSizeNoLocation() {
browserWrap.style.width = window.innerWidth + 'px'; browserWrap.style.width = window.innerWidth + 'px';
browserWrap.style.height = window.innerHeight + 'px'; browserWrap.style.height = window.innerHeight + 'px';
browserWrap.style.zIndex = '999999999'; browserWrap.style.zIndex = '999999999';
@@ -117,7 +116,7 @@ var IABExecs = {
var checkForwardBackward = function () { var checkForwardBackward = function () {
var backReq = browserElem.getCanGoBack(); var backReq = browserElem.getCanGoBack();
backReq.onsuccess = function() { backReq.onsuccess = function () {
if (this.result) { if (this.result) {
back.classList.remove('disabled'); back.classList.remove('disabled');
} else { } else {
@@ -125,7 +124,7 @@ var IABExecs = {
} }
}; };
var forwardReq = browserElem.getCanGoForward(); var forwardReq = browserElem.getCanGoForward();
forwardReq.onsuccess = function() { forwardReq.onsuccess = function () {
if (this.result) { if (this.result) {
forward.classList.remove('disabled'); forward.classList.remove('disabled');
} else { } else {
@@ -158,21 +157,21 @@ var IABExecs = {
browserWrap.appendChild(browserElem); browserWrap.appendChild(browserElem);
document.body.appendChild(browserWrap); document.body.appendChild(browserWrap);
//we use mozbrowserlocationchange instead of mozbrowserloadstart to get the url // we use mozbrowserlocationchange instead of mozbrowserloadstart to get the url
browserElem.addEventListener('mozbrowserlocationchange', function(e){ browserElem.addEventListener('mozbrowserlocationchange', function (e) {
win({ win({
type:'loadstart', type: 'loadstart',
url : e.detail url: e.detail
}); });
}, false); }, false);
browserElem.addEventListener('mozbrowserloadend', function(e){ browserElem.addEventListener('mozbrowserloadend', function (e) {
win({type:'loadstop'}); win({type: 'loadstop'});
}, false); }, false);
browserElem.addEventListener('mozbrowsererror', function(e){ browserElem.addEventListener('mozbrowsererror', function (e) {
win({type:'loaderror'}); win({type: 'loaderror'});
}, false); }, false);
browserElem.addEventListener('mozbrowserclose', function(e){ browserElem.addEventListener('mozbrowserclose', function (e) {
win({type:'exit'}); win({type: 'exit'});
}, false); }, false);
} else { } else {
window.location = strUrl; window.location = strUrl;

View File

@@ -270,7 +270,7 @@
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
if (self.inAppBrowserViewController != nil) { if (self.inAppBrowserViewController != nil) {
_previousStatusBarStyle = -1; _previousStatusBarStyle = -1;
[self.viewController dismissViewControllerAnimated:YES completion:nil]; [self.inAppBrowserViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
} }
}); });
} }

View File

@@ -19,14 +19,13 @@
* *
*/ */
/* jshint -W061 */
/* global oxide */ /* global oxide */
oxide.addMessageHandler("EXECUTE", function(msg) { oxide.addMessageHandler('EXECUTE', function (msg) {
var code = msg.args.code; var code = msg.args.code;
try { try {
msg.reply({result: eval(code)}); msg.reply({result: eval(code)}); // eslint-disable-line no-eval
} catch(e) { } catch (e) {
msg.error("Code threw exception: \"" + e + "\""); msg.error('Code threw exception: "' + e + '"');
} }
}); });

View File

@@ -1,4 +1,4 @@
/* /*
* *
* Licensed to the Apache Software Foundation (ASF) under one * Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file * or more contributor license agreements. See the NOTICE file
@@ -21,9 +21,10 @@
/* jslint sloppy:true */ /* jslint sloppy:true */
/* global Windows:true, setImmediate */ /* global Windows:true, setImmediate */
/* eslint standard/no-callback-literal : 0 */
var cordova = require('cordova'), var cordova = require('cordova');
urlutil = require('cordova/urlutil'); var urlutil = require('cordova/urlutil');
var browserWrap, var browserWrap,
popup, popup,
@@ -40,56 +41,56 @@ var browserWrap,
// http://msdn.microsoft.com/en-us/library/windows/apps/dn301831.aspx // http://msdn.microsoft.com/en-us/library/windows/apps/dn301831.aspx
var isWebViewAvailable = cordova.platformId === 'windows'; var isWebViewAvailable = cordova.platformId === 'windows';
function attachNavigationEvents(element, callback) { function attachNavigationEvents (element, callback) {
if (isWebViewAvailable) { if (isWebViewAvailable) {
element.addEventListener("MSWebViewNavigationStarting", function (e) { element.addEventListener('MSWebViewNavigationStarting', function (e) {
callback({ type: "loadstart", url: e.uri}, {keepCallback: true} ); callback({ type: 'loadstart', url: e.uri }, {keepCallback: true});
}); });
element.addEventListener("MSWebViewNavigationCompleted", function (e) { element.addEventListener('MSWebViewNavigationCompleted', function (e) {
if (e.isSuccess) { if (e.isSuccess) {
callback({ type: "loadstop", url: e.uri }, { keepCallback: true }); callback({ type: 'loadstop', url: e.uri }, { keepCallback: true });
} else { } else {
callback({ type: "loaderror", url: e.uri, code: e.webErrorStatus, message: "Navigation failed with error code " + e.webErrorStatus}, { keepCallback: true }); callback({ type: 'loaderror', url: e.uri, code: e.webErrorStatus, message: 'Navigation failed with error code ' + e.webErrorStatus }, { keepCallback: true });
} }
}); });
element.addEventListener("MSWebViewUnviewableContentIdentified", function (e) { element.addEventListener('MSWebViewUnviewableContentIdentified', function (e) {
// WebView found the content to be not HTML. // WebView found the content to be not HTML.
// http://msdn.microsoft.com/en-us/library/windows/apps/dn609716.aspx // http://msdn.microsoft.com/en-us/library/windows/apps/dn609716.aspx
callback({ type: "loaderror", url: e.uri, code: e.webErrorStatus, message: "Navigation failed with error code " + e.webErrorStatus}, { keepCallback: true }); callback({ type: 'loaderror', url: e.uri, code: e.webErrorStatus, message: 'Navigation failed with error code ' + e.webErrorStatus }, { keepCallback: true });
}); });
element.addEventListener("MSWebViewContentLoading", function (e) { element.addEventListener('MSWebViewContentLoading', function (e) {
if (navigationButtonsDiv && popup) { if (navigationButtonsDiv && popup) {
if (popup.canGoBack) { if (popup.canGoBack) {
backButton.removeAttribute("disabled"); backButton.removeAttribute('disabled');
} else { } else {
backButton.setAttribute("disabled", "true"); backButton.setAttribute('disabled', 'true');
} }
if (popup.canGoForward) { if (popup.canGoForward) {
forwardButton.removeAttribute("disabled"); forwardButton.removeAttribute('disabled');
} else { } else {
forwardButton.setAttribute("disabled", "true"); forwardButton.setAttribute('disabled', 'true');
} }
} }
}); });
} else { } else {
var onError = function () { var onError = function () {
callback({ type: "loaderror", url: this.contentWindow.location}, {keepCallback: true}); callback({ type: 'loaderror', url: this.contentWindow.location }, {keepCallback: true});
}; };
element.addEventListener("unload", function () { element.addEventListener('unload', function () {
callback({ type: "loadstart", url: this.contentWindow.location}, {keepCallback: true}); callback({ type: 'loadstart', url: this.contentWindow.location }, {keepCallback: true});
}); });
element.addEventListener("load", function () { element.addEventListener('load', function () {
callback({ type: "loadstop", url: this.contentWindow.location}, {keepCallback: true}); callback({ type: 'loadstop', url: this.contentWindow.location }, {keepCallback: true});
}); });
element.addEventListener("error", onError); element.addEventListener('error', onError);
element.addEventListener("abort", onError); element.addEventListener('abort', onError);
} }
} }
@@ -98,7 +99,7 @@ var IAB = {
setImmediate(function () { setImmediate(function () {
if (browserWrap) { if (browserWrap) {
if (navigationEventsCallback) { if (navigationEventsCallback) {
navigationEventsCallback({ type: "exit" }); navigationEventsCallback({ type: 'exit' });
} }
browserWrap.parentNode.removeChild(browserWrap); browserWrap.parentNode.removeChild(browserWrap);
@@ -107,52 +108,52 @@ var IAB = {
browserWrap = null; browserWrap = null;
popup = null; popup = null;
document.removeEventListener("backbutton", hardwareBackCallback, false); document.removeEventListener('backbutton', hardwareBackCallback, false);
} }
}); });
}, },
show: function (win, lose) { show: function (win, lose) {
setImmediate(function () { setImmediate(function () {
if (browserWrap) { if (browserWrap) {
browserWrap.style.display = "block"; browserWrap.style.display = 'block';
} }
}); });
}, },
hide: function (win, lose) { hide: function (win, lose) {
if (browserWrap) { if (browserWrap) {
browserWrap.style.display = "none"; browserWrap.style.display = 'none';
} }
}, },
open: function (win, lose, args) { open: function (win, lose, args) {
// make function async so that we can add navigation events handlers before view is loaded and navigation occured // make function async so that we can add navigation events handlers before view is loaded and navigation occured
setImmediate(function () { setImmediate(function () {
var strUrl = args[0], var strUrl = args[0];
target = args[1], var target = args[1];
features = args[2], var features = args[2];
url; var url;
navigationEventsCallback = win; navigationEventsCallback = win;
if (target === "_system") { if (target === '_system') {
url = new Windows.Foundation.Uri(strUrl); url = new Windows.Foundation.Uri(strUrl);
Windows.System.Launcher.launchUriAsync(url); Windows.System.Launcher.launchUriAsync(url);
} else if (target === "_self" || !target) { } else if (target === '_self' || !target) {
window.location = strUrl; window.location = strUrl;
} else { } else {
// "_blank" or anything else // "_blank" or anything else
if (!browserWrap) { if (!browserWrap) {
var browserWrapStyle = document.createElement('link'); var browserWrapStyle = document.createElement('link');
browserWrapStyle.rel = "stylesheet"; browserWrapStyle.rel = 'stylesheet';
browserWrapStyle.type = "text/css"; browserWrapStyle.type = 'text/css';
browserWrapStyle.href = urlutil.makeAbsolute("/www/css/inappbrowser.css"); browserWrapStyle.href = urlutil.makeAbsolute('/www/css/inappbrowser.css');
document.head.appendChild(browserWrapStyle); document.head.appendChild(browserWrapStyle);
browserWrap = document.createElement("div"); browserWrap = document.createElement('div');
browserWrap.className = "inAppBrowserWrap"; browserWrap.className = 'inAppBrowserWrap';
if (features.indexOf("fullscreen=yes") > -1) { if (features.indexOf('fullscreen=yes') > -1) {
browserWrap.classList.add("inAppBrowserWrapFullscreen"); browserWrap.classList.add('inAppBrowserWrapFullscreen');
} }
// Save body overflow style to be able to reset it back later // Save body overflow style to be able to reset it back later
@@ -166,22 +167,22 @@ var IAB = {
document.body.appendChild(browserWrap); document.body.appendChild(browserWrap);
// Hide scrollbars for the whole body while inappbrowser's window is open // Hide scrollbars for the whole body while inappbrowser's window is open
document.body.style.msOverflowStyle = "none"; document.body.style.msOverflowStyle = 'none';
} }
if (features.indexOf("hidden=yes") !== -1) { if (features.indexOf('hidden=yes') !== -1) {
browserWrap.style.display = "none"; browserWrap.style.display = 'none';
} }
popup = document.createElement(isWebViewAvailable ? "x-ms-webview" : "iframe"); popup = document.createElement(isWebViewAvailable ? 'x-ms-webview' : 'iframe');
if (popup instanceof HTMLIFrameElement) { if (popup instanceof HTMLIFrameElement) { // eslint-disable-line no-undef
// For iframe we need to override bacground color of parent element here // For iframe we need to override bacground color of parent element here
// otherwise pages without background color set will have transparent background // otherwise pages without background color set will have transparent background
popup.style.backgroundColor = "white"; popup.style.backgroundColor = 'white';
} }
popup.style.borderWidth = "0px"; popup.style.borderWidth = '0px';
popup.style.width = "100%"; popup.style.width = '100%';
popup.style.marginBottom = "-5px"; popup.style.marginBottom = '-5px';
browserWrap.appendChild(popup); browserWrap.appendChild(popup);
@@ -191,14 +192,14 @@ var IAB = {
}, 0); }, 0);
}; };
if (features.indexOf("hardwareback=yes") > -1 || features.indexOf("hardwareback") === -1) { if (features.indexOf('hardwareback=yes') > -1 || features.indexOf('hardwareback') === -1) {
hardwareBackCallback = function () { hardwareBackCallback = function () {
if (browserWrap.style.display === 'none') { if (browserWrap.style.display === 'none') {
// NOTE: backbutton handlers have to throw an exception in order to prevent // NOTE: backbutton handlers have to throw an exception in order to prevent
// returning 'true' inside cordova-js, which would mean that the event is handled by user. // returning 'true' inside cordova-js, which would mean that the event is handled by user.
// Throwing an exception means that the default/system navigation behavior will take place, // Throwing an exception means that the default/system navigation behavior will take place,
// which is to exit the app if the navigation stack is empty. // which is to exit the app if the navigation stack is empty.
throw 'Exit the app'; throw 'Exit the app'; // eslint-disable-line no-throw-literal
} }
if (popup.canGoBack) { if (popup.canGoBack) {
@@ -207,59 +208,57 @@ var IAB = {
closeHandler(); closeHandler();
} }
}; };
} else if (features.indexOf("hardwareback=no") > -1) { } else if (features.indexOf('hardwareback=no') > -1) {
hardwareBackCallback = function () { hardwareBackCallback = function () {
if (browserWrap.style.display === 'none') { if (browserWrap.style.display === 'none') {
// See comment above // See comment above
throw 'Exit the app'; throw 'Exit the app'; // eslint-disable-line no-throw-literal
} }
closeHandler(); closeHandler();
}; };
} }
document.addEventListener("backbutton", hardwareBackCallback, false); document.addEventListener('backbutton', hardwareBackCallback, false);
if (features.indexOf("location=yes") !== -1 || features.indexOf("location") === -1) { if (features.indexOf('location=yes') !== -1 || features.indexOf('location') === -1) {
popup.style.height = "calc(100% - 70px)"; popup.style.height = 'calc(100% - 70px)';
navigationButtonsDiv = document.createElement("div"); navigationButtonsDiv = document.createElement('div');
navigationButtonsDiv.className = "inappbrowser-app-bar"; navigationButtonsDiv.className = 'inappbrowser-app-bar';
navigationButtonsDiv.onclick = function (e) { navigationButtonsDiv.onclick = function (e) {
e.cancelBubble = true; e.cancelBubble = true;
}; };
navigationButtonsDivInner = document.createElement("div"); navigationButtonsDivInner = document.createElement('div');
navigationButtonsDivInner.className = "inappbrowser-app-bar-inner"; navigationButtonsDivInner.className = 'inappbrowser-app-bar-inner';
navigationButtonsDivInner.onclick = function (e) { navigationButtonsDivInner.onclick = function (e) {
e.cancelBubble = true; e.cancelBubble = true;
}; };
backButton = document.createElement("div"); backButton = document.createElement('div');
backButton.innerText = "back"; backButton.innerText = 'back';
backButton.className = "app-bar-action action-back"; backButton.className = 'app-bar-action action-back';
backButton.addEventListener("click", function (e) { backButton.addEventListener('click', function (e) {
if (popup.canGoBack) if (popup.canGoBack) { popup.goBack(); }
popup.goBack();
}); });
forwardButton = document.createElement("div"); forwardButton = document.createElement('div');
forwardButton.innerText = "forward"; forwardButton.innerText = 'forward';
forwardButton.className = "app-bar-action action-forward"; forwardButton.className = 'app-bar-action action-forward';
forwardButton.addEventListener("click", function (e) { forwardButton.addEventListener('click', function (e) {
if (popup.canGoForward) if (popup.canGoForward) { popup.goForward(); }
popup.goForward();
}); });
closeButton = document.createElement("div"); closeButton = document.createElement('div');
closeButton.innerText = "close"; closeButton.innerText = 'close';
closeButton.className = "app-bar-action action-close"; closeButton.className = 'app-bar-action action-close';
closeButton.addEventListener("click", closeHandler); closeButton.addEventListener('click', closeHandler);
if (!isWebViewAvailable) { if (!isWebViewAvailable) {
// iframe navigation is not yet supported // iframe navigation is not yet supported
backButton.setAttribute("disabled", "true"); backButton.setAttribute('disabled', 'true');
forwardButton.setAttribute("disabled", "true"); forwardButton.setAttribute('disabled', 'true');
} }
navigationButtonsDivInner.appendChild(backButton); navigationButtonsDivInner.appendChild(backButton);
@@ -269,14 +268,14 @@ var IAB = {
browserWrap.appendChild(navigationButtonsDiv); browserWrap.appendChild(navigationButtonsDiv);
} else { } else {
popup.style.height = "100%"; popup.style.height = '100%';
} }
// start listening for navigation events // start listening for navigation events
attachNavigationEvents(popup, navigationEventsCallback); attachNavigationEvents(popup, navigationEventsCallback);
if (isWebViewAvailable) { if (isWebViewAvailable) {
strUrl = strUrl.replace("ms-appx://", "ms-appx-web://"); strUrl = strUrl.replace('ms-appx://', 'ms-appx-web://');
} }
popup.src = strUrl; popup.src = strUrl;
} }
@@ -285,11 +284,11 @@ var IAB = {
injectScriptCode: function (win, fail, args) { injectScriptCode: function (win, fail, args) {
setImmediate(function () { setImmediate(function () {
var code = args[0], var code = args[0];
hasCallback = args[1]; var hasCallback = args[1];
if (isWebViewAvailable && browserWrap && popup) { if (isWebViewAvailable && browserWrap && popup) {
var op = popup.invokeScriptAsync("eval", code); var op = popup.invokeScriptAsync('eval', code);
op.oncomplete = function (e) { op.oncomplete = function (e) {
if (hasCallback) { if (hasCallback) {
// return null if event target is unavailable by some reason // return null if event target is unavailable by some reason
@@ -305,10 +304,10 @@ var IAB = {
injectScriptFile: function (win, fail, args) { injectScriptFile: function (win, fail, args) {
setImmediate(function () { setImmediate(function () {
var filePath = args[0], var filePath = args[0];
hasCallback = args[1]; var hasCallback = args[1];
if (!!filePath) { if (filePath) {
filePath = urlutil.makeAbsolute(filePath); filePath = urlutil.makeAbsolute(filePath);
} }
@@ -317,8 +316,8 @@ var IAB = {
var uri = new Windows.Foundation.Uri(filePath.replace('ms-appx-web:', 'ms-appx:')); var uri = new Windows.Foundation.Uri(filePath.replace('ms-appx-web:', 'ms-appx:'));
Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).done(function (file) { Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).done(function (file) {
Windows.Storage.FileIO.readTextAsync(file).done(function (code) { Windows.Storage.FileIO.readTextAsync(file).done(function (code) {
var op = popup.invokeScriptAsync("eval", code); var op = popup.invokeScriptAsync('eval', code);
op.oncomplete = function(e) { op.oncomplete = function (e) {
if (hasCallback) { if (hasCallback) {
var result = [e.target.result]; var result = [e.target.result];
win(result); win(result);
@@ -334,8 +333,8 @@ var IAB = {
injectStyleCode: function (win, fail, args) { injectStyleCode: function (win, fail, args) {
setImmediate(function () { setImmediate(function () {
var code = args[0], var code = args[0];
hasCallback = args[1]; var hasCallback = args[1];
if (isWebViewAvailable && browserWrap && popup) { if (isWebViewAvailable && browserWrap && popup) {
injectCSS(popup, code, hasCallback && win); injectCSS(popup, code, hasCallback && win);
@@ -345,8 +344,8 @@ var IAB = {
injectStyleFile: function (win, fail, args) { injectStyleFile: function (win, fail, args) {
setImmediate(function () { setImmediate(function () {
var filePath = args[0], var filePath = args[0];
hasCallback = args[1]; var hasCallback = args[1];
filePath = filePath && urlutil.makeAbsolute(filePath); filePath = filePath && urlutil.makeAbsolute(filePath);
@@ -368,11 +367,11 @@ var IAB = {
function injectCSS (webView, cssCode, callback) { function injectCSS (webView, cssCode, callback) {
// This will automatically escape all thing that we need (quotes, slashes, etc.) // This will automatically escape all thing that we need (quotes, slashes, etc.)
var escapedCode = JSON.stringify(cssCode); var escapedCode = JSON.stringify(cssCode);
var evalWrapper = "(function(d){var c=d.createElement('style');c.innerHTML=%s;d.head.appendChild(c);})(document)" var evalWrapper = '(function(d){var c=d.createElement(\'style\');c.innerHTML=%s;d.head.appendChild(c);})(document)'
.replace('%s', escapedCode); .replace('%s', escapedCode);
var op = webView.invokeScriptAsync("eval", evalWrapper); var op = webView.invokeScriptAsync('eval', evalWrapper);
op.oncomplete = function() { op.oncomplete = function () {
if (callback) { if (callback) {
callback([]); callback([]);
} }
@@ -383,4 +382,4 @@ function injectCSS (webView, cssCode, callback) {
module.exports = IAB; module.exports = IAB;
require("cordova/exec/proxy").add("InAppBrowser", module.exports); require('cordova/exec/proxy').add('InAppBrowser', module.exports);

2
tests/.eslintrc.yml Normal file
View File

@@ -0,0 +1,2 @@
env:
jasmine: true

14
tests/package.json Normal file
View File

@@ -0,0 +1,14 @@
{
"name": "cordova-plugin-inappbrowser-tests",
"version": "1.7.1-dev",
"description": "",
"cordova": {
"id": "cordova-plugin-inappbrowser-tests",
"platforms": []
},
"keywords": [
"ecosystem:cordova"
],
"author": "",
"license": "Apache 2.0"
}

View File

@@ -20,7 +20,7 @@
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" <plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
id="cordova-plugin-inappbrowser-tests" id="cordova-plugin-inappbrowser-tests"
version="1.7.0"> version="1.7.2">
<name>Cordova InAppBrowser Plugin Tests</name> <name>Cordova InAppBrowser Plugin Tests</name>
<license>Apache 2.0</license> <license>Apache 2.0</license>

View File

@@ -16,5 +16,5 @@
* specific language governing permissions and limitations * specific language governing permissions and limitations
* under the License. * under the License.
*/ */
var d = document.getElementById("header"); var d = document.getElementById('header');
d.innerHTML = "Script file successfully injected"; d.innerHTML = 'Script file successfully injected';

View File

@@ -19,11 +19,11 @@
* *
*/ */
/* jshint jasmine: true */
/* global MSApp */ /* global MSApp */
var cordova = require('cordova'); var cordova = require('cordova');
var isWindows = cordova.platformId == 'windows'; var isWindows = cordova.platformId === 'windows';
var isBrowser = cordova.platformId === 'browser';
window.alert = window.alert || navigator.notification.alert; window.alert = window.alert || navigator.notification.alert;
if (isWindows && navigator && navigator.notification && navigator.notification.alert) { if (isWindows && navigator && navigator.notification && navigator.notification.alert) {
@@ -35,11 +35,11 @@ exports.defineAutoTests = function () {
describe('cordova.InAppBrowser', function () { describe('cordova.InAppBrowser', function () {
it("inappbrowser.spec.1 should exist", function () { it('inappbrowser.spec.1 should exist', function () {
expect(cordova.InAppBrowser).toBeDefined(); expect(cordova.InAppBrowser).toBeDefined();
}); });
it("inappbrowser.spec.2 should contain open function", function () { it('inappbrowser.spec.2 should contain open function', function () {
expect(cordova.InAppBrowser.open).toBeDefined(); expect(cordova.InAppBrowser.open).toBeDefined();
expect(cordova.InAppBrowser.open).toEqual(jasmine.any(Function)); expect(cordova.InAppBrowser.open).toEqual(jasmine.any(Function));
}); });
@@ -47,7 +47,7 @@ exports.defineAutoTests = function () {
describe('open method', function () { describe('open method', function () {
if (cordova.platformId == 'osx') { if (cordova.platformId === 'osx') {
pending('Open method not fully supported on OSX.'); pending('Open method not fully supported on OSX.');
return; return;
} }
@@ -77,15 +77,16 @@ exports.defineAutoTests = function () {
setTimeout(done, 2000); setTimeout(done, 2000);
}); });
function verifyEvent(evt, type) { function verifyEvent (evt, type) {
expect(evt).toBeDefined(); expect(evt).toBeDefined();
expect(evt.type).toEqual(type); expect(evt.type).toEqual(type);
if (type !== 'exit') { // `exit` event does not have url field // `exit` event does not have url field, browser returns null url for CORS requests
if (type !== 'exit' && !isBrowser) {
expect(evt.url).toEqual(url); expect(evt.url).toEqual(url);
} }
} }
function verifyLoadErrorEvent(evt) { function verifyLoadErrorEvent (evt) {
expect(evt).toBeDefined(); expect(evt).toBeDefined();
expect(evt.type).toEqual('loaderror'); expect(evt.type).toEqual('loaderror');
expect(evt.url).toEqual(badUrl); expect(evt.url).toEqual(badUrl);
@@ -93,7 +94,7 @@ exports.defineAutoTests = function () {
expect(evt.message).toEqual(jasmine.any(String)); expect(evt.message).toEqual(jasmine.any(String));
} }
it("inappbrowser.spec.3 should retun InAppBrowser instance with required methods", function () { it('inappbrowser.spec.3 should return InAppBrowser instance with required methods', function () {
iabInstance = cordova.InAppBrowser.open(url, '_blank'); iabInstance = cordova.InAppBrowser.open(url, '_blank');
expect(iabInstance).toBeDefined(); expect(iabInstance).toBeDefined();
@@ -107,7 +108,7 @@ exports.defineAutoTests = function () {
expect(iabInstance.insertCSS).toEqual(jasmine.any(Function)); expect(iabInstance.insertCSS).toEqual(jasmine.any(Function));
}); });
it("inappbrowser.spec.4 should support loadstart and loadstop events", function (done) { it('inappbrowser.spec.4 should support loadstart and loadstop events', function (done) {
var onLoadStart = jasmine.createSpy('loadstart event callback').and.callFake(function (evt) { var onLoadStart = jasmine.createSpy('loadstart event callback').and.callFake(function (evt) {
verifyEvent(evt, 'loadstart'); verifyEvent(evt, 'loadstart');
}); });
@@ -116,12 +117,16 @@ exports.defineAutoTests = function () {
iabInstance.addEventListener('loadstart', onLoadStart); iabInstance.addEventListener('loadstart', onLoadStart);
iabInstance.addEventListener('loadstop', function (evt) { iabInstance.addEventListener('loadstop', function (evt) {
verifyEvent(evt, 'loadstop'); verifyEvent(evt, 'loadstop');
expect(onLoadStart).toHaveBeenCalled(); if (!isBrowser) {
// according to documentation, "loadstart" event is not supported on browser
// https://github.com/apache/cordova-plugin-inappbrowser#browser-quirks-1
expect(onLoadStart).toHaveBeenCalled();
}
done(); done();
}); });
}); });
it("inappbrowser.spec.5 should support exit event", function (done) { it('inappbrowser.spec.5 should support exit event', function (done) {
iabInstance = cordova.InAppBrowser.open(url, '_blank'); iabInstance = cordova.InAppBrowser.open(url, '_blank');
iabInstance.addEventListener('exit', function (evt) { iabInstance.addEventListener('exit', function (evt) {
verifyEvent(evt, 'exit'); verifyEvent(evt, 'exit');
@@ -131,7 +136,12 @@ exports.defineAutoTests = function () {
iabInstance = null; iabInstance = null;
}); });
it("inappbrowser.spec.6 should support loaderror event", function (done) { it('inappbrowser.spec.6 should support loaderror event', function (done) {
if (isBrowser) {
// according to documentation, "loaderror" event is not supported on browser
// https://github.com/apache/cordova-plugin-inappbrowser#browser-quirks-1
pending('Browser platform doesn\'t support loaderror event');
}
iabInstance = cordova.InAppBrowser.open(badUrl, '_blank'); iabInstance = cordova.InAppBrowser.open(badUrl, '_blank');
iabInstance.addEventListener('loaderror', function (evt) { iabInstance.addEventListener('loaderror', function (evt) {
verifyLoadErrorEvent(evt); verifyLoadErrorEvent(evt);
@@ -143,15 +153,15 @@ exports.defineAutoTests = function () {
exports.defineManualTests = function (contentEl, createActionButton) { exports.defineManualTests = function (contentEl, createActionButton) {
function doOpen(url, target, params, numExpectedRedirects, useWindowOpen) { function doOpen (url, target, params, numExpectedRedirects, useWindowOpen) {
numExpectedRedirects = numExpectedRedirects || 0; numExpectedRedirects = numExpectedRedirects || 0;
useWindowOpen = useWindowOpen || false; useWindowOpen = useWindowOpen || false;
console.log("Opening " + url); console.log('Opening ' + url);
var counts; var counts;
var lastLoadStartURL; var lastLoadStartURL;
var wasReset = false; var wasReset = false;
function reset() { function reset () {
counts = { counts = {
'loaderror': 0, 'loaderror': 0,
'loadstart': 0, 'loadstart': 0,
@@ -172,49 +182,48 @@ exports.defineManualTests = function (contentEl, createActionButton) {
if (useWindowOpen) { if (useWindowOpen) {
console.log('Use window.open() for url'); console.log('Use window.open() for url');
iab = window.open(url, target, params, callbacks); iab = window.open(url, target, params, callbacks);
} } else {
else {
iab = cordova.InAppBrowser.open(url, target, params, callbacks); iab = cordova.InAppBrowser.open(url, target, params, callbacks);
} }
if (!iab) { if (!iab) {
alert('open returned ' + iab); alert('open returned ' + iab); // eslint-disable-line no-undef
return; return;
} }
function logEvent(e) { function logEvent (e) {
console.log('IAB event=' + JSON.stringify(e)); console.log('IAB event=' + JSON.stringify(e));
counts[e.type]++; counts[e.type]++;
// Verify that event.url gets updated on redirects. // Verify that event.url gets updated on redirects.
if (e.type == 'loadstart') { if (e.type === 'loadstart') {
if (e.url == lastLoadStartURL) { if (e.url === lastLoadStartURL) {
alert('Unexpected: loadstart fired multiple times for the same URL.'); alert('Unexpected: loadstart fired multiple times for the same URL.'); // eslint-disable-line no-undef
} }
lastLoadStartURL = e.url; lastLoadStartURL = e.url;
} }
// Verify the right number of loadstart events were fired. // Verify the right number of loadstart events were fired.
if (e.type == 'loadstop' || e.type == 'loaderror') { if (e.type === 'loadstop' || e.type === 'loaderror') {
if (e.url != lastLoadStartURL) { if (e.url !== lastLoadStartURL) {
alert('Unexpected: ' + e.type + ' event.url != loadstart\'s event.url'); alert('Unexpected: ' + e.type + ' event.url != loadstart\'s event.url'); // eslint-disable-line no-undef
} }
if (numExpectedRedirects === 0 && counts.loadstart !== 1) { if (numExpectedRedirects === 0 && counts.loadstart !== 1) {
// Do allow a loaderror without a loadstart (e.g. in the case of an invalid URL). // Do allow a loaderror without a loadstart (e.g. in the case of an invalid URL).
if (!(e.type == 'loaderror' && counts.loadstart === 0)) { if (!(e.type === 'loaderror' && counts.loadstart === 0)) {
alert('Unexpected: got multiple loadstart events. (' + counts.loadstart + ')'); alert('Unexpected: got multiple loadstart events. (' + counts.loadstart + ')'); // eslint-disable-line no-undef
} }
} else if (numExpectedRedirects > 0 && counts.loadstart < (numExpectedRedirects + 1)) { } else if (numExpectedRedirects > 0 && counts.loadstart < (numExpectedRedirects + 1)) {
alert('Unexpected: should have got at least ' + (numExpectedRedirects + 1) + ' loadstart events, but got ' + counts.loadstart); alert('Unexpected: should have got at least ' + (numExpectedRedirects + 1) + ' loadstart events, but got ' + counts.loadstart); // eslint-disable-line no-undef
} }
wasReset = true; wasReset = true;
numExpectedRedirects = 0; numExpectedRedirects = 0;
reset(); reset();
} }
// Verify that loadend / loaderror was called. // Verify that loadend / loaderror was called.
if (e.type == 'exit') { if (e.type === 'exit') {
var numStopEvents = counts.loadstop + counts.loaderror; var numStopEvents = counts.loadstop + counts.loaderror;
if (numStopEvents === 0 && !wasReset) { if (numStopEvents === 0 && !wasReset) {
alert('Unexpected: browser closed without a loadstop or loaderror.'); alert('Unexpected: browser closed without a loadstop or loaderror.'); // eslint-disable-line no-undef
} else if (numStopEvents > 1) { } else if (numStopEvents > 1) {
alert('Unexpected: got multiple loadstop/loaderror events.'); alert('Unexpected: got multiple loadstop/loaderror events.'); // eslint-disable-line no-undef
} }
} }
} }
@@ -222,33 +231,31 @@ exports.defineManualTests = function (contentEl, createActionButton) {
return iab; return iab;
} }
function doHookOpen(url, target, params, numExpectedRedirects) { function doHookOpen (url, target, params, numExpectedRedirects) {
var originalFunc = window.open; var originalFunc = window.open;
var wasClobbered = window.hasOwnProperty('open'); var wasClobbered = window.hasOwnProperty('open');
window.open = cordova.InAppBrowser.open; window.open = cordova.InAppBrowser.open;
try { try {
doOpen(url, target, params, numExpectedRedirects, true); doOpen(url, target, params, numExpectedRedirects, true);
} } finally {
finally {
if (wasClobbered) { if (wasClobbered) {
window.open = originalFunc; window.open = originalFunc;
} } else {
else { console.log('just delete, to restore open from prototype');
console.log('just delete, to restore open from prototype');
delete window.open; delete window.open;
} }
} }
} }
function openWithStyle(url, cssUrl, useCallback) { function openWithStyle (url, cssUrl, useCallback) {
var iab = doOpen(url, '_blank', 'location=yes'); var iab = doOpen(url, '_blank', 'location=yes');
var callback = function (results) { var callback = function (results) {
if (results && results.length === 0) { if (results && results.length === 0) {
alert('Results verified'); alert('Results verified'); // eslint-disable-line no-undef
} else { } else {
console.log(results); console.log(results);
alert('Got: ' + typeof (results) + '\n' + JSON.stringify(results)); alert('Got: ' + typeof (results) + '\n' + JSON.stringify(results)); // eslint-disable-line no-undef
} }
}; };
if (cssUrl) { if (cssUrl) {
@@ -258,21 +265,21 @@ exports.defineManualTests = function (contentEl, createActionButton) {
} else { } else {
iab.addEventListener('loadstop', function (event) { iab.addEventListener('loadstop', function (event) {
iab.insertCSS({ code: '#style-update-literal { \ndisplay: block !important; \n}' }, iab.insertCSS({ code: '#style-update-literal { \ndisplay: block !important; \n}' },
useCallback && callback); useCallback && callback);
}); });
} }
} }
function openWithScript(url, jsUrl, useCallback) { function openWithScript (url, jsUrl, useCallback) {
var iab = doOpen(url, '_blank', 'location=yes'); var iab = doOpen(url, '_blank', 'location=yes');
if (jsUrl) { if (jsUrl) {
iab.addEventListener('loadstop', function (event) { iab.addEventListener('loadstop', function (event) {
iab.executeScript({ file: jsUrl }, useCallback && function (results) { iab.executeScript({ file: jsUrl }, useCallback && function (results) {
if (results && results.length === 0) { if (results && results.length === 0) {
alert('Results verified'); alert('Results verified'); // eslint-disable-line no-undef
} else { } else {
console.log(results); console.log(results);
alert('Got: ' + typeof (results) + '\n' + JSON.stringify(results)); alert('Got: ' + typeof (results) + '\n' + JSON.stringify(results)); // eslint-disable-line no-undef
} }
}); });
}); });
@@ -285,33 +292,33 @@ exports.defineManualTests = function (contentEl, createActionButton) {
'})()'; '})()';
iab.executeScript({ code: code }, useCallback && function (results) { iab.executeScript({ code: code }, useCallback && function (results) {
if (results && results.length === 1 && results[0] === 'abc') { if (results && results.length === 1 && results[0] === 'abc') {
alert('Results verified'); alert('Results verified'); // eslint-disable-line no-undef
} else { } else {
console.log(results); console.log(results);
alert('Got: ' + typeof (results) + '\n' + JSON.stringify(results)); alert('Got: ' + typeof (results) + '\n' + JSON.stringify(results)); // eslint-disable-line no-undef
} }
}); });
}); });
} }
} }
var hiddenwnd = null; var hiddenwnd = null;
var loadlistener = function (event) { alert('background window loaded '); }; var loadlistener = function (event) { alert('background window loaded '); }; // eslint-disable-line no-undef
function openHidden(url, startHidden) { function openHidden (url, startHidden) {
var shopt = (startHidden) ? 'hidden=yes' : ''; var shopt = (startHidden) ? 'hidden=yes' : '';
hiddenwnd = cordova.InAppBrowser.open(url, 'random_string', shopt); hiddenwnd = cordova.InAppBrowser.open(url, 'random_string', shopt);
if (!hiddenwnd) { if (!hiddenwnd) {
alert('cordova.InAppBrowser.open returned ' + hiddenwnd); alert('cordova.InAppBrowser.open returned ' + hiddenwnd); // eslint-disable-line no-undef
return; return;
} }
if (startHidden) hiddenwnd.addEventListener('loadstop', loadlistener); if (startHidden) hiddenwnd.addEventListener('loadstop', loadlistener);
} }
function showHidden() { function showHidden () {
if (!!hiddenwnd) { if (hiddenwnd) {
hiddenwnd.show(); hiddenwnd.show();
} }
} }
function closeHidden() { function closeHidden () {
if (!!hiddenwnd) { if (hiddenwnd) {
hiddenwnd.removeEventListener('loadstop', loadlistener); hiddenwnd.removeEventListener('loadstop', loadlistener);
hiddenwnd.close(); hiddenwnd.close();
hiddenwnd = null; hiddenwnd = null;
@@ -456,14 +463,14 @@ exports.defineManualTests = function (contentEl, createActionButton) {
'<p/> <div id="openHardwareBackYes"></div>' + '<p/> <div id="openHardwareBackYes"></div>' +
'Expected result: hardwareback=yes pressing back button should navigate backwards in history then close InAppBrowser' + 'Expected result: hardwareback=yes pressing back button should navigate backwards in history then close InAppBrowser' +
'<p/> <div id="openHardwareBackNo"></div>' + '<p/> <div id="openHardwareBackNo"></div>' +
'Expected result: hardwareback=no pressing back button should close InAppBrowser regardless history' + 'Expected result: hardwareback=no pressing back button should close InAppBrowser regardless history' +
'<p/> <div id="openHardwareBackDefaultAfterNo"></div>' + '<p/> <div id="openHardwareBackDefaultAfterNo"></div>' +
'Expected result: consistently open browsers with with the appropriate option: hardwareback=defaults to yes then hardwareback=no then hardwareback=defaults to yes. By default hardwareback is yes so pressing back button should navigate backwards in history then close InAppBrowser'; 'Expected result: consistently open browsers with with the appropriate option: hardwareback=defaults to yes then hardwareback=no then hardwareback=defaults to yes. By default hardwareback is yes so pressing back button should navigate backwards in history then close InAppBrowser';
// CB-7490 We need to wrap this code due to Windows security restrictions // CB-7490 We need to wrap this code due to Windows security restrictions
// see http://msdn.microsoft.com/en-us/library/windows/apps/hh465380.aspx#differences for details // see http://msdn.microsoft.com/en-us/library/windows/apps/hh465380.aspx#differences for details
if (window.MSApp && window.MSApp.execUnsafeLocalFunction) { if (window.MSApp && window.MSApp.execUnsafeLocalFunction) {
MSApp.execUnsafeLocalFunction(function() { MSApp.execUnsafeLocalFunction(function () {
contentEl.innerHTML = info_div + local_tests + white_listed_tests + non_white_listed_tests + page_with_redirects_tests + pdf_url_tests + invalid_url_tests + contentEl.innerHTML = info_div + local_tests + white_listed_tests + non_white_listed_tests + page_with_redirects_tests + pdf_url_tests + invalid_url_tests +
css_js_injection_tests + open_hidden_tests + clearing_cache_tests + video_tag_tests + local_with_anchor_tag_tests + hardwareback_tests; css_js_injection_tests + open_hidden_tests + clearing_cache_tests + video_tag_tests + local_with_anchor_tag_tests + hardwareback_tests;
}); });
@@ -472,18 +479,18 @@ exports.defineManualTests = function (contentEl, createActionButton) {
css_js_injection_tests + open_hidden_tests + clearing_cache_tests + video_tag_tests + local_with_anchor_tag_tests + hardwareback_tests; css_js_injection_tests + open_hidden_tests + clearing_cache_tests + video_tag_tests + local_with_anchor_tag_tests + hardwareback_tests;
} }
document.getElementById("user-agent").textContent = navigator.userAgent; document.getElementById('user-agent').textContent = navigator.userAgent;
// we are already in cdvtests directory // we are already in cdvtests directory
var basePath = 'iab-resources/'; var basePath = 'iab-resources/';
var localhtml = basePath + 'local.html', var localhtml = basePath + 'local.html';
localpdf = basePath + 'local.pdf', var localpdf = basePath + 'local.pdf';
injecthtml = basePath + 'inject.html', var injecthtml = basePath + 'inject.html';
injectjs = isWindows ? basePath + 'inject.js' : 'inject.js', var injectjs = isWindows ? basePath + 'inject.js' : 'inject.js';
injectcss = isWindows ? basePath + 'inject.css' : 'inject.css', var injectcss = isWindows ? basePath + 'inject.css' : 'inject.css';
videohtml = basePath + 'video.html'; var videohtml = basePath + 'video.html';
//Local // Local
createActionButton('target=Default', function () { createActionButton('target=Default', function () {
doOpen(localhtml); doOpen(localhtml);
}, 'openLocal'); }, 'openLocal');
@@ -512,7 +519,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
doOpen(localhtml, 'random_string', 'toolbarposition=top,location=no'); doOpen(localhtml, 'random_string', 'toolbarposition=top,location=no');
}, 'openLocalRandomToolBarTopNoLocation'); }, 'openLocalRandomToolBarTopNoLocation');
//White Listed // White Listed
createActionButton('* target=Default', function () { createActionButton('* target=Default', function () {
doOpen('http://cordova.apache.org'); doOpen('http://cordova.apache.org');
}, 'openWhiteListed'); }, 'openWhiteListed');
@@ -535,7 +542,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
doOpen('http://cordova.apache.org', 'random_string', 'location=no'); doOpen('http://cordova.apache.org', 'random_string', 'location=no');
}, 'openWhiteListedRandomNoLocation'); }, 'openWhiteListedRandomNoLocation');
//Non White Listed // Non White Listed
createActionButton('target=Default', function () { createActionButton('target=Default', function () {
doOpen('http://www.apple.com'); doOpen('http://www.apple.com');
}, 'openNonWhiteListed'); }, 'openNonWhiteListed');
@@ -558,7 +565,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
doOpen('http://www.apple.com', 'random_string', 'location=no'); doOpen('http://www.apple.com', 'random_string', 'location=no');
}, 'openNonWhiteListedRandomNoLocation'); }, 'openNonWhiteListedRandomNoLocation');
//Page with redirect // Page with redirect
createActionButton('http://google.co.uk', function () { createActionButton('http://google.co.uk', function () {
doOpen('http://google.co.uk', 'random_string', '', 1); doOpen('http://google.co.uk', 'random_string', '', 1);
}, 'openRedirect301'); }, 'openRedirect301');
@@ -566,7 +573,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
doOpen('http://goo.gl/pUFqg', 'random_string', '', 2); doOpen('http://goo.gl/pUFqg', 'random_string', '', 2);
}, 'openRedirect302'); }, 'openRedirect302');
//PDF URL // PDF URL
createActionButton('Remote URL', function () { createActionButton('Remote URL', function () {
doOpen('http://www.stluciadance.com/prospectus_file/sample.pdf'); doOpen('http://www.stluciadance.com/prospectus_file/sample.pdf');
}, 'openPDF'); }, 'openPDF');
@@ -574,7 +581,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
doOpen(localpdf, '_blank'); doOpen(localpdf, '_blank');
}, 'openPDFBlank'); }, 'openPDFBlank');
//Invalid URL // Invalid URL
createActionButton('Invalid Scheme', function () { createActionButton('Invalid Scheme', function () {
doOpen('x-ttp://www.invalid.com/', '_blank'); doOpen('x-ttp://www.invalid.com/', '_blank');
}, 'openInvalidScheme'); }, 'openInvalidScheme');
@@ -585,7 +592,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
doOpen('nonexistent.html', '_blank'); doOpen('nonexistent.html', '_blank');
}, 'openInvalidMissing'); }, 'openInvalidMissing');
//CSS / JS injection // CSS / JS injection
createActionButton('Original Document', function () { createActionButton('Original Document', function () {
doOpen(injecthtml, '_blank'); doOpen(injecthtml, '_blank');
}, 'openOriginalDocument'); }, 'openOriginalDocument');
@@ -614,7 +621,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
openWithScript(injecthtml, null, true); openWithScript(injecthtml, null, true);
}, 'openScriptLiteralInjectionCallback'); }, 'openScriptLiteralInjectionCallback');
//Open hidden // Open hidden
createActionButton('Create Hidden', function () { createActionButton('Create Hidden', function () {
openHidden('https://www.google.co.uk', true); openHidden('https://www.google.co.uk', true);
}, 'openHidden'); }, 'openHidden');
@@ -634,7 +641,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
}, 2000); }, 2000);
}, 'openVisibleAndHide'); }, 'openVisibleAndHide');
//Clearing cache // Clearing cache
createActionButton('Clear Browser Cache', function () { createActionButton('Clear Browser Cache', function () {
doOpen('https://www.google.co.uk', '_blank', 'clearcache=yes'); doOpen('https://www.google.co.uk', '_blank', 'clearcache=yes');
}, 'openClearCache'); }, 'openClearCache');
@@ -642,7 +649,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
doOpen('https://www.google.co.uk', '_blank', 'clearsessioncache=yes'); doOpen('https://www.google.co.uk', '_blank', 'clearsessioncache=yes');
}, 'openClearSessionCache'); }, 'openClearSessionCache');
//Video tag // Video tag
createActionButton('Remote Video', function () { createActionButton('Remote Video', function () {
doOpen(videohtml, '_blank'); doOpen(videohtml, '_blank');
}, 'openRemoteVideo'); }, 'openRemoteVideo');
@@ -653,7 +660,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
doOpen(videohtml, '_blank', 'mediaPlaybackRequiresUserAction=yes'); doOpen(videohtml, '_blank', 'mediaPlaybackRequiresUserAction=yes');
}, 'openRemoteNeedUserYesVideo'); }, 'openRemoteNeedUserYesVideo');
//Local With Anchor Tag // Local With Anchor Tag
createActionButton('Anchor1', function () { createActionButton('Anchor1', function () {
doOpen(localhtml + '#bogusanchor', '_blank'); doOpen(localhtml + '#bogusanchor', '_blank');
}, 'openAnchor1'); }, 'openAnchor1');
@@ -671,17 +678,17 @@ exports.defineManualTests = function (contentEl, createActionButton) {
createActionButton('hardwareback=no', function () { createActionButton('hardwareback=no', function () {
doOpen('http://cordova.apache.org', '_blank', 'hardwareback=no'); doOpen('http://cordova.apache.org', '_blank', 'hardwareback=no');
}, 'openHardwareBackNo'); }, 'openHardwareBackNo');
createActionButton('no hardwareback -> hardwareback=no -> no hardwareback', function() { createActionButton('no hardwareback -> hardwareback=no -> no hardwareback', function () {
var ref = cordova.InAppBrowser.open('https://google.com', '_blank', 'location=yes'); var ref = cordova.InAppBrowser.open('https://google.com', '_blank', 'location=yes');
ref.addEventListener('loadstop', function() { ref.addEventListener('loadstop', function () {
ref.close(); ref.close();
}); });
ref.addEventListener('exit', function() { ref.addEventListener('exit', function () {
var ref2 = cordova.InAppBrowser.open('https://google.com', '_blank', 'location=yes,hardwareback=no'); var ref2 = cordova.InAppBrowser.open('https://google.com', '_blank', 'location=yes,hardwareback=no');
ref2.addEventListener('loadstop', function() { ref2.addEventListener('loadstop', function () {
ref2.close(); ref2.close();
}); });
ref2.addEventListener('exit', function() { ref2.addEventListener('exit', function () {
cordova.InAppBrowser.open('https://google.com', '_blank', 'location=yes'); cordova.InAppBrowser.open('https://google.com', '_blank', 'location=yes');
}); });
}); });

2
types/index.d.ts vendored
View File

@@ -168,6 +168,8 @@ interface InAppBrowser extends Window {
removeEventListener(type: string, callback: (event: Event) => void): void; removeEventListener(type: string, callback: (event: Event) => void): void;
/** Closes the InAppBrowser window. */ /** Closes the InAppBrowser window. */
close(): void; close(): void;
/** Hides the InAppBrowser window. Calling this has no effect if the InAppBrowser was already hidden. */
hide(): void;
/** /**
* Displays an InAppBrowser window that was opened hidden. Calling this has no effect * Displays an InAppBrowser window that was opened hidden. Calling this has no effect
* if the InAppBrowser was already visible. * if the InAppBrowser was already visible.

View File

@@ -19,7 +19,7 @@
* *
*/ */
(function() { (function () {
// special patch to correctly work on Ripple emulator (CB-9760) // special patch to correctly work on Ripple emulator (CB-9760)
if (window.parent && !!window.parent.ripple) { // https://gist.github.com/triceam/4658021 if (window.parent && !!window.parent.ripple) { // https://gist.github.com/triceam/4658021
module.exports = window.open.bind(window); // fallback to default window.open behaviour module.exports = window.open.bind(window); // fallback to default window.open behaviour
@@ -31,13 +31,13 @@
var modulemapper = require('cordova/modulemapper'); var modulemapper = require('cordova/modulemapper');
var urlutil = require('cordova/urlutil'); var urlutil = require('cordova/urlutil');
function InAppBrowser() { function InAppBrowser () {
this.channels = { this.channels = {
'loadstart': channel.create('loadstart'), 'loadstart': channel.create('loadstart'),
'loadstop' : channel.create('loadstop'), 'loadstop': channel.create('loadstop'),
'loaderror' : channel.create('loaderror'), 'loaderror': channel.create('loaderror'),
'exit' : channel.create('exit') 'exit': channel.create('exit')
}; };
} }
InAppBrowser.prototype = { InAppBrowser.prototype = {
@@ -47,47 +47,47 @@
} }
}, },
close: function (eventname) { close: function (eventname) {
exec(null, null, "InAppBrowser", "close", []); exec(null, null, 'InAppBrowser', 'close', []);
}, },
show: function (eventname) { show: function (eventname) {
exec(null, null, "InAppBrowser", "show", []); exec(null, null, 'InAppBrowser', 'show', []);
}, },
hide: function (eventname) { hide: function (eventname) {
exec(null, null, "InAppBrowser", "hide", []); exec(null, null, 'InAppBrowser', 'hide', []);
}, },
addEventListener: function (eventname,f) { addEventListener: function (eventname, f) {
if (eventname in this.channels) { if (eventname in this.channels) {
this.channels[eventname].subscribe(f); this.channels[eventname].subscribe(f);
} }
}, },
removeEventListener: function(eventname, f) { removeEventListener: function (eventname, f) {
if (eventname in this.channels) { if (eventname in this.channels) {
this.channels[eventname].unsubscribe(f); this.channels[eventname].unsubscribe(f);
} }
}, },
executeScript: function(injectDetails, cb) { executeScript: function (injectDetails, cb) {
if (injectDetails.code) { if (injectDetails.code) {
exec(cb, null, "InAppBrowser", "injectScriptCode", [injectDetails.code, !!cb]); exec(cb, null, 'InAppBrowser', 'injectScriptCode', [injectDetails.code, !!cb]);
} else if (injectDetails.file) { } else if (injectDetails.file) {
exec(cb, null, "InAppBrowser", "injectScriptFile", [injectDetails.file, !!cb]); exec(cb, null, 'InAppBrowser', 'injectScriptFile', [injectDetails.file, !!cb]);
} else { } else {
throw new Error('executeScript requires exactly one of code or file to be specified'); throw new Error('executeScript requires exactly one of code or file to be specified');
} }
}, },
insertCSS: function(injectDetails, cb) { insertCSS: function (injectDetails, cb) {
if (injectDetails.code) { if (injectDetails.code) {
exec(cb, null, "InAppBrowser", "injectStyleCode", [injectDetails.code, !!cb]); exec(cb, null, 'InAppBrowser', 'injectStyleCode', [injectDetails.code, !!cb]);
} else if (injectDetails.file) { } else if (injectDetails.file) {
exec(cb, null, "InAppBrowser", "injectStyleFile", [injectDetails.file, !!cb]); exec(cb, null, 'InAppBrowser', 'injectStyleFile', [injectDetails.file, !!cb]);
} else { } else {
throw new Error('insertCSS requires exactly one of code or file to be specified'); throw new Error('insertCSS requires exactly one of code or file to be specified');
} }
} }
}; };
module.exports = function(strUrl, strWindowName, strWindowFeatures, callbacks) { module.exports = function (strUrl, strWindowName, strWindowFeatures, callbacks) {
// Don't catch calls that write to existing frames (e.g. named iframes). // Don't catch calls that write to existing frames (e.g. named iframes).
if (window.frames && window.frames[strWindowName]) { if (window.frames && window.frames[strWindowName]) {
var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open'); var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open');
@@ -102,13 +102,13 @@
iab.addEventListener(callbackName, callbacks[callbackName]); iab.addEventListener(callbackName, callbacks[callbackName]);
} }
var cb = function(eventname) { var cb = function (eventname) {
iab._eventHandler(eventname); iab._eventHandler(eventname);
}; };
strWindowFeatures = strWindowFeatures || ""; strWindowFeatures = strWindowFeatures || '';
exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]); exec(cb, cb, 'InAppBrowser', 'open', [strUrl, strWindowName, strWindowFeatures]);
return iab; return iab;
}; };
})(); })();

View File

@@ -19,8 +19,8 @@
* *
*/ */
/*jslint sloppy:true */ /* jslint sloppy:true */
/*global Windows:true, require, document, setTimeout, window, module */ /* global Windows:true, require, document, setTimeout, window, module */
var browserWrap; var browserWrap;
@@ -36,33 +36,33 @@ var IAB = {
/* empty block, ran out of bacon? /* empty block, ran out of bacon?
if (browserWrap) { if (browserWrap) {
}*/ } */
}, },
hide: function (win, lose) { hide: function (win, lose) {
/* empty block, ran out of bacon? /* empty block, ran out of bacon?
if (browserWrap) { if (browserWrap) {
}*/ } */
}, },
open: function (win, lose, args) { open: function (win, lose, args) {
var strUrl = args[0], var strUrl = args[0];
target = args[1], var target = args[1];
url, var url;
elem; var elem;
if (target === "_system") { if (target === '_system') {
url = new Windows.Foundation.Uri(strUrl); url = new Windows.Foundation.Uri(strUrl);
Windows.System.Launcher.launchUriAsync(url); Windows.System.Launcher.launchUriAsync(url);
} else if (target === "_blank") { } else if (target === '_blank') {
if (!browserWrap) { if (!browserWrap) {
browserWrap = document.createElement("div"); browserWrap = document.createElement('div');
browserWrap.style.position = "absolute"; browserWrap.style.position = 'absolute';
browserWrap.style.width = (window.innerWidth - 80) + "px"; browserWrap.style.width = (window.innerWidth - 80) + 'px';
browserWrap.style.height = (window.innerHeight - 80) + "px"; browserWrap.style.height = (window.innerHeight - 80) + 'px';
browserWrap.style.borderWidth = "40px"; browserWrap.style.borderWidth = '40px';
browserWrap.style.borderStyle = "solid"; browserWrap.style.borderStyle = 'solid';
browserWrap.style.borderColor = "rgba(0,0,0,0.25)"; browserWrap.style.borderColor = 'rgba(0,0,0,0.25)';
browserWrap.style.zIndex = "9999999"; browserWrap.style.zIndex = '9999999';
browserWrap.onclick = function () { browserWrap.onclick = function () {
setTimeout(function () { setTimeout(function () {
@@ -74,33 +74,31 @@ var IAB = {
} }
var localFile = (strUrl.indexOf('ms-appdata:///') > -1); var localFile = (strUrl.indexOf('ms-appdata:///') > -1);
if (localFile) { if (localFile) {
elem = document.createElement("x-ms-webview"); elem = document.createElement('x-ms-webview');
elem.style.width = (window.innerWidth - 80) + "px"; elem.style.width = (window.innerWidth - 80) + 'px';
elem.style.height = (window.innerHeight - 80) + "px"; elem.style.height = (window.innerHeight - 80) + 'px';
elem.style.borderWidth = "0px"; elem.style.borderWidth = '0px';
elem.name = "targetFrame"; elem.name = 'targetFrame';
elem.src = strUrl; elem.src = strUrl;
window.addEventListener("resize", function () { window.addEventListener('resize', function () {
if (browserWrap && elem) { if (browserWrap && elem) {
elem.style.width = (window.innerWidth - 80) + "px"; elem.style.width = (window.innerWidth - 80) + 'px';
elem.style.height = (window.innerHeight - 80) + "px"; elem.style.height = (window.innerHeight - 80) + 'px';
} }
}); });
} else { } else {
elem = document.createElement("iframe"); elem = document.createElement('iframe');
elem.style.width = (window.innerWidth - 80) + "px"; elem.style.width = (window.innerWidth - 80) + 'px';
elem.style.height = (window.innerHeight - 80) + "px"; elem.style.height = (window.innerHeight - 80) + 'px';
elem.style.borderWidth = "0px"; elem.style.borderWidth = '0px';
elem.name = "targetFrame"; elem.name = 'targetFrame';
elem.src = strUrl; elem.src = strUrl;
window.addEventListener('resize', function () {
window.addEventListener("resize", function () {
if (browserWrap && elem) { if (browserWrap && elem) {
elem.style.width = (window.innerWidth - 80) + "px"; elem.style.width = (window.innerWidth - 80) + 'px';
elem.style.height = (window.innerHeight - 80) + "px"; elem.style.height = (window.innerHeight - 80) + 'px';
} }
}); });
} }
@@ -110,8 +108,7 @@ var IAB = {
window.location = strUrl; window.location = strUrl;
} }
//var object = new WinJS.UI.HtmlControl(elem, { uri: strUrl }); // var object = new WinJS.UI.HtmlControl(elem, { uri: strUrl });
}, },
injectScriptCode: function (code, bCB) { injectScriptCode: function (code, bCB) {
@@ -126,5 +123,4 @@ var IAB = {
module.exports = IAB; module.exports = IAB;
require('cordova/exec/proxy').add('InAppBrowser', module.exports);
require("cordova/exec/proxy").add("InAppBrowser", module.exports);