mirror of
https://github.com/shuto-cn/cordova-plugin-inappbrowser.git
synced 2026-05-04 00:00:06 +08:00
Compare commits
136 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 90d41e87ce | |||
| 19a2179d1d | |||
| bfff56aef4 | |||
| e5d6d6f69a | |||
| 88b71b3a57 | |||
| a40a10f1ea | |||
| 514469ab24 | |||
| abbbcc2461 | |||
| b9653af691 | |||
| 2c4bef1f97 | |||
| e785533ab4 | |||
| 3056997c78 | |||
| 3f80b0b59c | |||
| 71b43d39a4 | |||
| d2eaa089f8 | |||
| 1bf42c9e3b | |||
| 70d74e5273 | |||
| 2818011249 | |||
| 80e4831a7f | |||
| 7a816d8454 | |||
| 50a78baf22 | |||
| 216ed8ae57 | |||
| 8012ae709b | |||
| 80010ae309 | |||
| 927e7a8e98 | |||
| 003f0fd3cd | |||
| 0d79919aa5 | |||
| a0785deff8 | |||
| e9eb234683 | |||
| 32c0e41c43 | |||
| 43592a4789 | |||
| 4b3a838704 | |||
| ac0bdee8e6 | |||
| 22b3f0ccd4 | |||
| 6e0ea336fc | |||
| f47f5449c2 | |||
| 8ce6b497fa | |||
| df90a6acc4 | |||
| f90e571430 | |||
| ec8c4527b9 | |||
| faf37db5da | |||
| 5fc1beed0d | |||
| 832ff5f2e9 | |||
| 4f957919c7 | |||
| 81161ebe66 | |||
| 683937872d | |||
| 2c018a3460 | |||
| 315a0e30db | |||
| 69ca780772 | |||
| 79f73fbe62 | |||
| c37b08e038 | |||
| 0900f5cc62 | |||
| 97e0eac603 | |||
| c2c94f315b | |||
| 8cb876c63a | |||
| cc2f8966ba | |||
| f620b64035 | |||
| d828197de4 | |||
| 6e38667320 | |||
| ea6a4fc80a | |||
| ac9c64964e | |||
| 61239c12e8 | |||
| 9fe291ce7a | |||
| 225bde271b | |||
| e5d07f14e8 | |||
| f866e0ed9f | |||
| ae5e01ef04 | |||
| 91b84579e8 | |||
| 89ae9dbd53 | |||
| c011fe2d9d | |||
| 992306bbc5 | |||
| 384d3fb8a6 | |||
| f9c235caf5 | |||
| df001e2765 | |||
| 393524a3ea | |||
| eb704f8212 | |||
| 75cadab5ee | |||
| 846190a6f8 | |||
| cd7916d025 | |||
| 03e1715cfe | |||
| 8fea6be60a | |||
| 9fc6654b89 | |||
| 1953356fd2 | |||
| 687ce60470 | |||
| 8e2db096ae | |||
| abf757edff | |||
| 5270462611 | |||
| a6cd0a16ba | |||
| 7b24dcb3dd | |||
| 282fdb7a40 | |||
| 6ee35a09ca | |||
| be9034ff6c | |||
| e2a0bb8715 | |||
| 907bba6cf6 | |||
| ab7494faa0 | |||
| 8f2ad211ad | |||
| 40778ba239 | |||
| c25bc30d7d | |||
| b9f8fcd8a9 | |||
| 11f833b46d | |||
| 1c98bc5b3f | |||
| c5061ec333 | |||
| 932f078e2d | |||
| 1c32236353 | |||
| 34c29dc2ec | |||
| aa6c1519d2 | |||
| 2fc9f3da1f | |||
| bddf86c3ce | |||
| cc5b0ce5a3 | |||
| 88f330abd8 | |||
| 25f306d11e | |||
| 04de070dcd | |||
| c14871da95 | |||
| 51879d8e2f | |||
| 22c7a0e51e | |||
| bdf4ade2bb | |||
| 6b25158e07 | |||
| 9399ed3955 | |||
| 749d55c676 | |||
| fceea502a3 | |||
| aa9a5db941 | |||
| e282cc9e38 | |||
| 7dbad601f0 | |||
| 5680f18bb4 | |||
| a5dedae631 | |||
| d0dd10103c | |||
| 34653ce393 | |||
| 497a23efc7 | |||
| 6f373f7ed9 | |||
| 300f1e782e | |||
| a5201cc1e3 | |||
| 942d17981e | |||
| 4a3c134be1 | |||
| dbf54d2d09 | |||
| 863386398e | |||
| ef9ca5ad3e |
@@ -0,0 +1,37 @@
|
|||||||
|
<!--
|
||||||
|
#
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
# or more contributor license agreements. See the NOTICE file
|
||||||
|
# distributed with this work for additional information
|
||||||
|
# regarding copyright ownership. The ASF licenses this file
|
||||||
|
# to you under the Apache License, Version 2.0 (the
|
||||||
|
# "License"); you may not use this file except in compliance
|
||||||
|
# with the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing,
|
||||||
|
# software distributed under the License is distributed on an
|
||||||
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
# KIND, either express or implied. See the License for the
|
||||||
|
# specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
#
|
||||||
|
-->
|
||||||
|
|
||||||
|
# Contributing to Apache Cordova
|
||||||
|
|
||||||
|
Anyone can contribute to Cordova. And we need your contributions.
|
||||||
|
|
||||||
|
There are multiple ways to contribute: report bugs, improve the docs, and
|
||||||
|
contribute code.
|
||||||
|
|
||||||
|
For instructions on this, start with the
|
||||||
|
[contribution overview](http://cordova.apache.org/#contribute).
|
||||||
|
|
||||||
|
The details are explained there, but the important items are:
|
||||||
|
- Sign and submit an Apache ICLA (Contributor License Agreement).
|
||||||
|
- Have a Jira issue open that corresponds to your contribution.
|
||||||
|
- Run the tests so your patch doesn't break existing functionality.
|
||||||
|
|
||||||
|
We look forward to your contributions!
|
||||||
@@ -78,3 +78,89 @@
|
|||||||
* Validate that callbackId is correctly formed
|
* Validate that callbackId is correctly formed
|
||||||
* CB-6035 Move js-module so it is not loaded on unsupported platforms
|
* CB-6035 Move js-module so it is not loaded on unsupported platforms
|
||||||
* Removed some iOS6 Deprecations
|
* Removed some iOS6 Deprecations
|
||||||
|
|
||||||
|
### 0.3.3 (Mar 5, 2014)
|
||||||
|
* CB-5534 Fix video/audio does not stop playing when browser is closed
|
||||||
|
* CB-6172 Fix broken install on case-sensitive file-systems
|
||||||
|
|
||||||
|
|
||||||
|
### 0.4.0 (Apr 17, 2014)
|
||||||
|
* CB-6360: [ios] Fix for crash on iOS < 6.0 (closes #37)
|
||||||
|
* CB-3324: [WP8] Add support for back-button inappbrowser [WP8] if there is no history -> InAppBrowser is closed
|
||||||
|
* [WP] await async calls, resolve warnings
|
||||||
|
* [WP] Make InAppBrowser work with embedded files, using system behavior
|
||||||
|
* CB-6402: [WP8] pass empty string instead of null for [optional] windowFeatures string
|
||||||
|
* CB-6422: [windows8] use cordova/exec/proxy
|
||||||
|
* CB-6389 CB-3617: Add clearcache and clearsessioncache options to iOS (like Android)
|
||||||
|
* Doc update: event name and example param (closes #31)
|
||||||
|
* CB-6253: [WP] Add Network Capability to WMAppManifest.xml
|
||||||
|
* CB-6212: [iOS] fix warnings compiled under arm64 64-bit
|
||||||
|
* CB-6218: Update docs for BB10
|
||||||
|
* CB-6460: Update license headers
|
||||||
|
|
||||||
|
### 0.5.0 (Jun 05, 2014)
|
||||||
|
* CB-6127 Spanish and rench Translations added. Github close #23
|
||||||
|
* Clean up whitespace (mainly due to no newline at eof warning)
|
||||||
|
* Adding permission info
|
||||||
|
* CB-6806 Add license
|
||||||
|
* CB-6491 add CONTRIBUTING.md
|
||||||
|
* Add necessary capability so the plugin works on its own
|
||||||
|
* CB-6474 InAppBrowser. Add data urls support to WP8
|
||||||
|
* CB-6482 InAppBrowser calls incorrect callback on WP8
|
||||||
|
* Fixed use of iOS 6 deprecated methods
|
||||||
|
* CB-6360 - improvement: feature detection instead of iOS version detection
|
||||||
|
* CB-5649 - InAppBrowser overrides App's orientation
|
||||||
|
* refactoring fixed
|
||||||
|
* CB-6396 [Firefox OS] Adding basic support
|
||||||
|
|
||||||
|
### 0.5.1 (Aug 06, 2014)
|
||||||
|
* ubuntu: support qt 5.2
|
||||||
|
* **FFOS** update InAppBrowserProxy.js
|
||||||
|
* **FFOS** app needs to be privileged
|
||||||
|
* CB-6127 Updated translations for docs
|
||||||
|
* CB-6769 ios: Fix statusbar color reset wasn't working on iOS7+
|
||||||
|
|
||||||
|
### 0.5.2 (Sep 17, 2014)
|
||||||
|
* CB-7471 cordova-plugin-inappbrowser documentation translation: cordova-plugin-inappbrowser
|
||||||
|
* CB-7490 Fixes InAppBrowser manual tests crash on windows platform
|
||||||
|
* CB-7249 cordova-plugin-inappbrowser documentation translation: cordova-plugin-inappbrowser
|
||||||
|
* CB-7424 Wrong docs: anchor tags are not supported by the InAppBrowser
|
||||||
|
* CB-7133 clarify that anchor1 doesn't exist
|
||||||
|
* CB-7133 more fixup of tests on Android
|
||||||
|
* CB-7133 fix up the tests for Android
|
||||||
|
* Add just a bit more logging
|
||||||
|
* CB-7133 port inappbrowser to plugin-test-framework
|
||||||
|
* phonegap events supported for \_blank target
|
||||||
|
* inappbrowser \_blank target position is fixed
|
||||||
|
* amazon-fireos related changes.
|
||||||
|
|
||||||
|
### 0.5.3 (Oct 03, 2014)
|
||||||
|
* Windows implementation fixes and improvements
|
||||||
|
* zIndex fixed
|
||||||
|
* renamed InAppBrowser back to inappbrowser for case sensitive operating systems
|
||||||
|
* Update french translation
|
||||||
|
* Update doc to add Windows 8
|
||||||
|
* Update windows proxy to be both compatible with windows 8 and 8.1
|
||||||
|
* Rename windows81 by windows8 in src directory
|
||||||
|
* Append Windows 8.1 platform configuration in plugin.xml
|
||||||
|
* Append Windows 8.1 proxy using x-ms-webview
|
||||||
|
|
||||||
|
### 0.5.4 (Dec 02, 2014)
|
||||||
|
* CB-7784 Exit event is not fired after `InAppBrowser` closing
|
||||||
|
* CB-7697 Add `locationBar` support to `InAppBrowser` **Windows** platform version
|
||||||
|
* CB-7690 `InAppBrowser` `loadstart/loadstop` events issues
|
||||||
|
* CB-7695 Fix `InAppBrowser` `injectScriptFile` for **Windows 8.1** / **Windows Phone 8.1**
|
||||||
|
* CB-7692 `InAppBrowser` local url opening bug in 8.1
|
||||||
|
* CB-7688 `Alert` is not supported in `InAppBrowser` on **Windows** platform
|
||||||
|
* CB-7977 Mention `deviceready` in plugin docs
|
||||||
|
* CB-7876 change test target to avoid undesired redirects
|
||||||
|
* CB-7712 remove references to `closebuttoncaption`
|
||||||
|
* CB-7850 clarify role of whitelist
|
||||||
|
* CB-7720 check if event is null since OK string from success callback was removed
|
||||||
|
* CB-7471 cordova-plugin-inappbrowser documentation translation: cordova-plugin-inappbrowser
|
||||||
|
|
||||||
|
### 0.6.0 (Feb 04, 2015)
|
||||||
|
* CB-8270 ios: Remove usage of `[arr JSONString]`, since it's been renamed to `cdv_JSONString`
|
||||||
|
* ubuntu: implement inject* functions
|
||||||
|
* ubuntu: port to oxide
|
||||||
|
* CB-7897 ios, android: Update to work with whilelist plugins in Cordova 4.x
|
||||||
|
|||||||
+330
@@ -0,0 +1,330 @@
|
|||||||
|
<!---
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
# org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
|
Dieses Plugin bietet eine Web-Browser-Ansicht, die beim Aufruf angezeigt`window.open()`.
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
|
||||||
|
|
||||||
|
**Hinweis**: Das InAppBrowser Fenster verhält sich wie ein Standard-Webbrowser. Auf die Cordova-API kann in diesem Moment nicht zugegriffen werden!
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
cordova plugin add org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
|
|
||||||
|
## window.open
|
||||||
|
|
||||||
|
Öffnet eine URL in einer neuen `InAppBrowser` Instanz, der aktuelle Browserinstanz oder der Systembrowser.
|
||||||
|
|
||||||
|
var ref = window.open(url, target, options);
|
||||||
|
|
||||||
|
|
||||||
|
* **Ref**: Bezugnahme auf das `InAppBrowser` Fenster. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **URL**: die URL um den *(String)* zu laden. Rufen Sie `encodeURI()` auf, wenn die URL Unicode-Zeichen enthält.
|
||||||
|
|
||||||
|
* **Ziel**: das Ziel in welchem die URL geladen werden soll. Standardmäßig entspricht dieser Wert `_self` . *(String)*
|
||||||
|
|
||||||
|
* `_self`: Öffnet sich in der Cordova WebView wenn der URL in der Whitelist ist, andernfalls es öffnet sich in der`InAppBrowser`.
|
||||||
|
* `_blank`: Öffnet den`InAppBrowser`.
|
||||||
|
* `_system`: Öffnet in den System-Web-Browser.
|
||||||
|
|
||||||
|
* **Optionen**: Optionen für die `InAppBrowser` . Optional, säumige an: `location=yes` . *(String)*
|
||||||
|
|
||||||
|
Die `options` Zeichenfolge muss keine Leerstelle enthalten, und jede Funktion Name/Wert-Paare müssen durch ein Komma getrennt werden. Featurenamen Groß-/Kleinschreibung. Alle Plattformen unterstützen die anderen Werte:
|
||||||
|
|
||||||
|
* **Lage**: Legen Sie auf `yes` oder `no` , machen die `InAppBrowser` der Adressleiste ein- oder ausschalten.
|
||||||
|
|
||||||
|
Nur Android:
|
||||||
|
|
||||||
|
* **Closebuttoncaption**: Legen Sie auf eine Zeichenfolge als Beschriftung der **fertig** -Schaltfläche verwenden.
|
||||||
|
* **versteckte**: Legen Sie auf `yes` um den Browser zu erstellen und laden Sie die Seite, aber nicht zeigen. Das Loadstop-Ereignis wird ausgelöst, wenn der Ladevorgang abgeschlossen ist. Weglassen oder auf `no` (Standard), den Browser öffnen und laden normalerweise zu haben.
|
||||||
|
* **ClearCache**: Legen Sie auf `yes` , der Browser ist Cookiecache gelöscht, bevor das neue Fenster geöffnet wird
|
||||||
|
* **Clearsessioncache**: Legen Sie auf `yes` , der Sitzungs-Cookie Cache gelöscht, bevor das neue Fenster geöffnet wird
|
||||||
|
|
||||||
|
iOS nur:
|
||||||
|
|
||||||
|
* **Closebuttoncaption**: Legen Sie auf eine Zeichenfolge als Beschriftung der **fertig** -Schaltfläche verwenden. Beachten Sie, dass Sie diesen Wert selbst zu lokalisieren müssen.
|
||||||
|
* **Disallowoverscroll**: Legen Sie auf `yes` oder `no` (Standard ist `no` ). Aktiviert/deaktiviert die UIWebViewBounce-Eigenschaft.
|
||||||
|
* **versteckte**: Legen Sie auf `yes` um den Browser zu erstellen und laden Sie die Seite, aber nicht zeigen. Das Loadstop-Ereignis wird ausgelöst, wenn der Ladevorgang abgeschlossen ist. Weglassen oder auf `no` (Standard), den Browser öffnen und laden normalerweise zu haben.
|
||||||
|
* **ClearCache**: Legen Sie auf `yes` , der Browser ist Cookiecache gelöscht, bevor das neue Fenster geöffnet wird
|
||||||
|
* **Clearsessioncache**: Legen Sie auf `yes` zu der Session Cookie Cache gelöscht, bevor das neue Fenster geöffnet wird
|
||||||
|
* **Symbolleiste**: Legen Sie auf `yes` oder `no` Aktivieren Sie die Symbolleiste ein- oder Ausschalten für InAppBrowser (Standard:`yes`)
|
||||||
|
* **EnableViewportScale**: Legen Sie auf `yes` oder `no` , Viewport Skalierung durch ein Meta-Tag (standardmäßig zu verhindern`no`).
|
||||||
|
* **MediaPlaybackRequiresUserAction**: Legen Sie auf `yes` oder `no` , HTML5 audio oder video von automatisches Abspielen (standardmäßig zu verhindern`no`).
|
||||||
|
* **AllowInlineMediaPlayback**: Legen Sie auf `yes` oder `no` Inline-HTML5-Media-Wiedergabe, Darstellung im Browser-Fenster, sondern in eine gerätespezifische Wiedergabe-Schnittstelle ermöglichen. Des HTML `video` Element muss auch die `webkit-playsinline` Attribut (Standard:`no`)
|
||||||
|
* **KeyboardDisplayRequiresUserAction**: Legen Sie auf `yes` oder `no` um die Tastatur zu öffnen, wenn Formularelemente Fokus per JavaScript erhalten `focus()` Anruf (Standard:`yes`).
|
||||||
|
* **SuppressesIncrementalRendering**: Legen Sie auf `yes` oder `no` zu warten, bis alle neuen anzeigen-Inhalte empfangen wird, bevor Sie wiedergegeben wird (standardmäßig`no`).
|
||||||
|
* **Presentationstyle**: Legen Sie auf `pagesheet` , `formsheet` oder `fullscreen` [Präsentationsstil][1] (standardmäßig fest`fullscreen`).
|
||||||
|
* **Transitionstyle**: Legen Sie auf `fliphorizontal` , `crossdissolve` oder `coververtical` [Übergangsstil][2] (standardmäßig fest`coververtical`).
|
||||||
|
* **Toolbarposition**: Legen Sie auf `top` oder `bottom` (Standard ist `bottom` ). Bewirkt, dass die Symbolleiste am oberen oder unteren Rand des Fensters sein.
|
||||||
|
|
||||||
|
Nur Windows:
|
||||||
|
|
||||||
|
* **versteckte**: Legen Sie auf `yes` um den Browser zu erstellen und laden Sie die Seite, aber nicht zeigen. Das Loadstop-Ereignis wird ausgelöst, wenn der Ladevorgang abgeschlossen ist. Weglassen oder auf `no` (Standard), den Browser öffnen und laden normalerweise zu haben.
|
||||||
|
|
||||||
|
[1]: http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalPresentationStyle
|
||||||
|
[2]: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalTransitionStyle
|
||||||
|
|
||||||
|
### Unterstützte Plattformen
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* BlackBerry 10
|
||||||
|
* Firefox OS
|
||||||
|
* iOS
|
||||||
|
* Windows 8 und 8.1
|
||||||
|
* Windows Phone 7 und 8
|
||||||
|
|
||||||
|
### Beispiel
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
var ref2 = window.open(encodeURI('http://ja.m.wikipedia.org/wiki/ハングル'), '_blank', 'location=yes');
|
||||||
|
|
||||||
|
|
||||||
|
### Firefox OS Macken
|
||||||
|
|
||||||
|
Als Plugin jedes Design erzwingen nicht besteht die Notwendigkeit, einige CSS-Regeln hinzuzufügen, wenn bei `target='_blank'` . Die Regeln könnte wie diese aussehen.
|
||||||
|
|
||||||
|
css
|
||||||
|
.inAppBrowserWrap {
|
||||||
|
background-color: rgba(0,0,0,0.75);
|
||||||
|
color: rgba(235,235,235,1.0);
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu {
|
||||||
|
overflow: auto;
|
||||||
|
list-style-type: none;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu li {
|
||||||
|
font-size: 25px;
|
||||||
|
height: 25px;
|
||||||
|
float: left;
|
||||||
|
margin: 0 10px;
|
||||||
|
padding: 3px 10px;
|
||||||
|
text-decoration: none;
|
||||||
|
color: #ccc;
|
||||||
|
display: block;
|
||||||
|
background: rgba(30,30,30,0.50);
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu li.disabled {
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
## InAppBrowser
|
||||||
|
|
||||||
|
Aus einem Aufruf zurückgegebenen Objekts`window.open`.
|
||||||
|
|
||||||
|
### Methoden
|
||||||
|
|
||||||
|
* addEventListener
|
||||||
|
* removeEventListener
|
||||||
|
* Schließen
|
||||||
|
* Karte
|
||||||
|
* executeScript
|
||||||
|
* insertCSS
|
||||||
|
|
||||||
|
## addEventListener
|
||||||
|
|
||||||
|
> Fügt einen Listener für eine Veranstaltung aus der`InAppBrowser`.
|
||||||
|
|
||||||
|
ref.addEventListener(eventname, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **Ref**: Bezugnahme auf die `InAppBrowser` Fenster *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **EventName**: das Ereignis zu warten *(String)*
|
||||||
|
|
||||||
|
* **Loadstart**: Ereignis wird ausgelöst, wenn die `InAppBrowser` beginnt, eine URL zu laden.
|
||||||
|
* **Loadstop**: Ereignis wird ausgelöst, wenn der `InAppBrowser` beendet ist, eine URL laden.
|
||||||
|
* **LoadError**: Ereignis wird ausgelöst, wenn der `InAppBrowser` ein Fehler auftritt, wenn Sie eine URL zu laden.
|
||||||
|
* **Ausfahrt**: Ereignis wird ausgelöst, wenn das `InAppBrowser` -Fenster wird geschlossen.
|
||||||
|
|
||||||
|
* **Rückruf**: die Funktion, die ausgeführt wird, wenn das Ereignis ausgelöst wird. Die Funktion übergeben wird ein `InAppBrowserEvent` -Objekt als Parameter.
|
||||||
|
|
||||||
|
### InAppBrowserEvent Eigenschaften
|
||||||
|
|
||||||
|
* **Typ**: Eventname, entweder `loadstart` , `loadstop` , `loaderror` , oder `exit` . *(String)*
|
||||||
|
|
||||||
|
* **URL**: die URL, die geladen wurde. *(String)*
|
||||||
|
|
||||||
|
* **Code**: der Fehler-Code, nur im Fall von `loaderror` . *(Anzahl)*
|
||||||
|
|
||||||
|
* **Nachricht**: die Fehlermeldung angezeigt, nur im Fall von `loaderror` . *(String)*
|
||||||
|
|
||||||
|
### Unterstützte Plattformen
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 und 8.1
|
||||||
|
* Windows Phone 7 und 8
|
||||||
|
|
||||||
|
### Kurzes Beispiel
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstart', function(event) { alert(event.url); });
|
||||||
|
|
||||||
|
|
||||||
|
## removeEventListener
|
||||||
|
|
||||||
|
> Entfernt einen Listener für eine Veranstaltung aus der`InAppBrowser`.
|
||||||
|
|
||||||
|
ref.removeEventListener(eventname, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **Ref**: Bezugnahme auf die `InAppBrowser` Fenster. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **EventName**: das Ereignis zu warten. *(String)*
|
||||||
|
|
||||||
|
* **Loadstart**: Ereignis wird ausgelöst, wenn die `InAppBrowser` beginnt, eine URL zu laden.
|
||||||
|
* **Loadstop**: Ereignis wird ausgelöst, wenn der `InAppBrowser` beendet ist, eine URL laden.
|
||||||
|
* **LoadError**: Ereignis wird ausgelöst, wenn die `InAppBrowser` trifft einen Fehler beim Laden einer URLs.
|
||||||
|
* **Ausfahrt**: Ereignis wird ausgelöst, wenn das `InAppBrowser` -Fenster wird geschlossen.
|
||||||
|
|
||||||
|
* **Rückruf**: die Funktion ausgeführt, wenn das Ereignis ausgelöst wird. Die Funktion übergeben wird ein `InAppBrowserEvent` Objekt.
|
||||||
|
|
||||||
|
### Unterstützte Plattformen
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 und 8.1
|
||||||
|
* Windows Phone 7 und 8
|
||||||
|
|
||||||
|
### Kurzes Beispiel
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
var myCallback = function(event) { alert(event.url); }
|
||||||
|
ref.addEventListener('loadstart', myCallback);
|
||||||
|
ref.removeEventListener('loadstart', myCallback);
|
||||||
|
|
||||||
|
|
||||||
|
## Schließen
|
||||||
|
|
||||||
|
> Schließt die `InAppBrowser` Fenster.
|
||||||
|
|
||||||
|
Ref.Close();
|
||||||
|
|
||||||
|
|
||||||
|
* **Ref**: Bezugnahme auf die `InAppBrowser` Fenster *(InAppBrowser)*
|
||||||
|
|
||||||
|
### Unterstützte Plattformen
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* Firefox OS
|
||||||
|
* iOS
|
||||||
|
* Windows 8 und 8.1
|
||||||
|
* Windows Phone 7 und 8
|
||||||
|
|
||||||
|
### Kurzes Beispiel
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.close();
|
||||||
|
|
||||||
|
|
||||||
|
## Karte
|
||||||
|
|
||||||
|
> Zeigt ein InAppBrowser-Fenster, das geöffnet wurde, versteckt. Aufrufen, dies hat keine Auswirkungen, wenn die InAppBrowser schon sichtbar war.
|
||||||
|
|
||||||
|
Ref.Show();
|
||||||
|
|
||||||
|
|
||||||
|
* **Ref**: Verweis auf die (InAppBrowser) Fenster`InAppBrowser`)
|
||||||
|
|
||||||
|
### Unterstützte Plattformen
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 und 8.1
|
||||||
|
|
||||||
|
### Kurzes Beispiel
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'hidden=yes');
|
||||||
|
// some time later...
|
||||||
|
ref.show();
|
||||||
|
|
||||||
|
|
||||||
|
## executeScript
|
||||||
|
|
||||||
|
> Fügt JavaScript-Code in das `InAppBrowser` Fenster
|
||||||
|
|
||||||
|
ref.executeScript(details, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **Ref**: Bezugnahme auf die `InAppBrowser` Fenster. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **InjectDetails**: Informationen über das Skript ausgeführt, angeben, entweder ein `file` oder `code` Schlüssel. *(Objekt)*
|
||||||
|
|
||||||
|
* **Datei**: URL des Skripts zu injizieren.
|
||||||
|
* **Code**: Text des Skripts zu injizieren.
|
||||||
|
|
||||||
|
* **Rückruf**: die Funktion, die ausgeführt wird, nachdem der JavaScript-Code injiziert wird.
|
||||||
|
|
||||||
|
* Wenn das eingefügte Skript vom Typ ist `code` , der Rückruf führt mit einen einzelnen Parameter, der der Rückgabewert des Skripts ist, umwickelt ein `Array` . Bei Multi-Line-Skripten ist der Rückgabewert von der letzten Anweisung oder den letzten Ausdruck ausgewertet.
|
||||||
|
|
||||||
|
### Unterstützte Plattformen
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 und 8.1
|
||||||
|
|
||||||
|
### Kurzes Beispiel
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.executeScript({file: "myscript.js"});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
## insertCSS
|
||||||
|
|
||||||
|
> Injiziert CSS in der `InAppBrowser` Fenster.
|
||||||
|
|
||||||
|
ref.insertCSS(details, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **Ref**: Bezugnahme auf die `InAppBrowser` Fenster *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **InjectDetails**: Informationen über das Skript ausgeführt, angeben, entweder ein `file` oder `code` Schlüssel. *(Objekt)*
|
||||||
|
|
||||||
|
* **Datei**: URL des Stylesheets zu injizieren.
|
||||||
|
* **Code**: Text des Stylesheets zu injizieren.
|
||||||
|
|
||||||
|
* **Rückruf**: die Funktion, die ausgeführt wird, nachdem die CSS injiziert wird.
|
||||||
|
|
||||||
|
### Unterstützte Plattformen
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
|
||||||
|
### Kurzes Beispiel
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.insertCSS({file: "mystyles.css"});
|
||||||
|
});
|
||||||
+330
@@ -0,0 +1,330 @@
|
|||||||
|
<!---
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
# org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
|
Este plugin proporciona una vista de navegador web que se muestra cuando se llama a`window.open()`.
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
|
||||||
|
|
||||||
|
**Nota**: InAppBrowser la ventana se comporta como un navegador web estándar y no pueden acceder a Cordova APIs.
|
||||||
|
|
||||||
|
## Instalación
|
||||||
|
|
||||||
|
cordova plugin add org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
|
|
||||||
|
## window.open
|
||||||
|
|
||||||
|
Se abre una dirección URL en una nueva instancia de `InAppBrowser`, la instancia actual del navegador o el navegador del sistema.
|
||||||
|
|
||||||
|
var ref = window.open(url, target, options);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: referencia a la `InAppBrowser` ventana. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **url**: el URL para cargar *(String)*. Llame a `encodeURI()` en esto si la URL contiene caracteres Unicode.
|
||||||
|
|
||||||
|
* **target**: el objetivo en el que se carga la URL, un parámetro opcional que se utiliza de forma predeterminada `_self`. *(String)*
|
||||||
|
|
||||||
|
* `_self`: se abre en el Cordova WebView si la URL está en la lista blanca, de lo contrario se abre en el `InAppBrowser`.
|
||||||
|
* `_blank`: abre en el `InAppBrowser`.
|
||||||
|
* `_system`: se abre en el navegador del sistema.
|
||||||
|
|
||||||
|
* **options**: opciones para el `InAppBrowser`. Opcional, contumaz a: `location=yes`. *(String)*
|
||||||
|
|
||||||
|
La cadena de `options` no debe contener ningún espacio en blanco, y los pares de nombre y valor de cada característica deben estar separados por una coma. Los nombres de función son minúsculas. Todas las plataformas admiten el valor siguiente:
|
||||||
|
|
||||||
|
* **location**: se establece en `yes` o `no` para activar o desactivar la barra de ubicación de la `InAppBrowser`.
|
||||||
|
|
||||||
|
Sólo Android:
|
||||||
|
|
||||||
|
* **closebuttoncaption**: establecer una cadena para usar como título del botón **hecho** .
|
||||||
|
* **oculta**: a `yes` para crear el navegador y cargar la página, pero no lo demuestra. El evento loadstop se desencadena cuando termine la carga. Omitir o a `no` (por defecto) para que el navegador abra y carga normalmente.
|
||||||
|
* **clearcache**: a `yes` para que el navegador es caché de galleta despejado antes de que se abra la nueva ventana
|
||||||
|
* **clearsessioncache**: a `yes` que la caché de cookie de sesión despejado antes de que se abra la nueva ventana
|
||||||
|
|
||||||
|
Sólo iOS:
|
||||||
|
|
||||||
|
* **closebuttoncaption**: establecer una cadena para usar como título del botón **hecho** . Tenga en cuenta que necesitas localizar este valor por sí mismo.
|
||||||
|
* **disallowoverscroll**: A `yes` o `no` (valor por defecto es `no` ). Activa/desactiva la propiedad UIWebViewBounce.
|
||||||
|
* **oculta**: a `yes` para crear el navegador y cargar la página, pero no lo demuestra. El evento loadstop se desencadena cuando termine la carga. Omitir o a `no` (por defecto) para que el navegador abra y carga normalmente.
|
||||||
|
* **clearcache**: a `yes` para que el navegador es caché de galleta despejado antes de que se abra la nueva ventana
|
||||||
|
* **clearsessioncache**: a `yes` que la caché de cookie de sesión despejado antes de que se abra la nueva ventana
|
||||||
|
* **barra de herramientas**: a `yes` o `no` para activar la barra de herramientas on u off para el InAppBrowser (por defecto`yes`)
|
||||||
|
* **enableViewportScale**: Set a `yes` o `no` para evitar viewport escalar a través de una etiqueta meta (por defecto a `no`).
|
||||||
|
* **mediaPlaybackRequiresUserAction**: Set a `yes` o `no` para evitar HTML5 audio o vídeo de reproducción automática (por defecto a `no`).
|
||||||
|
* **allowInlineMediaPlayback**: A `yes` o `no` para permitir la reproducción de los medios de comunicación en línea HTML5, mostrando en la ventana del navegador en lugar de una interfaz específica del dispositivo de reproducción. Elemento `video` de HTML también debe incluir el atributo de `webkit-playsinline` (por defecto a `no`)
|
||||||
|
* **keyboardDisplayRequiresUserAction**: se establece en `yes` o `no` para abrir el teclado cuando elementos de formulario reciben el foco mediante llamada de JavaScript de `focus()` (por defecto a `yes`).
|
||||||
|
* **suppressesIncrementalRendering**: se establece en `yes` o `no` para esperar hasta que todos los nuevos contenidos de vista se recibieron antes de ser prestados (por defecto a `no`).
|
||||||
|
* **presentationstyle**: se establece en `pagesheet`, `formsheet` o `fullscreen` para definir el [estilo de la presentación][1] (por defecto a `fullscreen`).
|
||||||
|
* **transitionstyle**: se establece en `fliphorizontal`, `crossdissolve` o `coververtical` para definir el [estilo de transición][2] (por defecto `coververtical`).
|
||||||
|
* **toolbarposition**: A `top` o `bottom` (valor por defecto es `bottom` ). Hace que la barra de herramientas en la parte superior o inferior de la ventana.
|
||||||
|
|
||||||
|
Sólo Windows:
|
||||||
|
|
||||||
|
* **oculta**: a `yes` para crear el navegador y cargar la página, pero no lo demuestra. El evento loadstop se desencadena cuando termine la carga. Omitir o a `no` (por defecto) para que el navegador abra y carga normalmente.
|
||||||
|
|
||||||
|
[1]: http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalPresentationStyle
|
||||||
|
[2]: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalTransitionStyle
|
||||||
|
|
||||||
|
### Plataformas soportadas
|
||||||
|
|
||||||
|
* Amazon fire OS
|
||||||
|
* Android
|
||||||
|
* BlackBerry 10
|
||||||
|
* Firefox OS
|
||||||
|
* iOS
|
||||||
|
* Windows 8 y 8.1
|
||||||
|
* Windows Phone 7 y 8
|
||||||
|
|
||||||
|
### Ejemplo
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
var ref2 = window.open(encodeURI('http://ja.m.wikipedia.org/wiki/ハングル'), '_blank', 'location=yes');
|
||||||
|
|
||||||
|
|
||||||
|
### Firefox OS rarezas
|
||||||
|
|
||||||
|
Como plugin no cumplir cualquier diseño es necesario añadir algunas reglas CSS si abre con `target='_blank'` . Las reglas pueden parecerse a estos
|
||||||
|
|
||||||
|
css
|
||||||
|
.inAppBrowserWrap {
|
||||||
|
background-color: rgba(0,0,0,0.75);
|
||||||
|
color: rgba(235,235,235,1.0);
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu {
|
||||||
|
overflow: auto;
|
||||||
|
list-style-type: none;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu li {
|
||||||
|
font-size: 25px;
|
||||||
|
height: 25px;
|
||||||
|
float: left;
|
||||||
|
margin: 0 10px;
|
||||||
|
padding: 3px 10px;
|
||||||
|
text-decoration: none;
|
||||||
|
color: #ccc;
|
||||||
|
display: block;
|
||||||
|
background: rgba(30,30,30,0.50);
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu li.disabled {
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
## InAppBrowser
|
||||||
|
|
||||||
|
El objeto devuelto desde una llamada a `window.open`.
|
||||||
|
|
||||||
|
### Métodos
|
||||||
|
|
||||||
|
* addEventListener
|
||||||
|
* removeEventListener
|
||||||
|
* close
|
||||||
|
* show
|
||||||
|
* executeScript
|
||||||
|
* insertCSS
|
||||||
|
|
||||||
|
## addEventListener
|
||||||
|
|
||||||
|
> Añade un detector para un evento de la `InAppBrowser`.
|
||||||
|
|
||||||
|
ref.addEventListener(eventname, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: referencia a la ventana de `InAppBrowser` *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **eventName**: el evento para escuchar *(String)*
|
||||||
|
|
||||||
|
* **loadstart**: evento se desencadena cuando el `InAppBrowser` comienza a cargar una dirección URL.
|
||||||
|
* **loadstop**: evento desencadena cuando los acabados `InAppBrowser` cargar una dirección URL.
|
||||||
|
* **loaderror**: evento se desencadena cuando el `InAppBrowser` encuentra un error al cargar una dirección URL.
|
||||||
|
* **exit**: evento se desencadena cuando se cierra la ventana de `InAppBrowser`.
|
||||||
|
|
||||||
|
* **callback**: la función que se ejecuta cuando se desencadene el evento. La función se pasa un objeto `InAppBrowserEvent` como un parámetro.
|
||||||
|
|
||||||
|
### InAppBrowserEvent propiedades
|
||||||
|
|
||||||
|
* **type**: eventname, `loadstart`, `loadstop`, `loaderror` o `exit`. *(String)*
|
||||||
|
|
||||||
|
* **url**: la URL que se cargó. *(String)*
|
||||||
|
|
||||||
|
* **code**: el código de error, sólo en el caso de `loaderror`. *(Número)*
|
||||||
|
|
||||||
|
* **message**: el mensaje de error, sólo en el caso de `loaderror`. *(String)*
|
||||||
|
|
||||||
|
### Plataformas soportadas
|
||||||
|
|
||||||
|
* Amazon fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 y 8.1
|
||||||
|
* Windows Phone 7 y 8
|
||||||
|
|
||||||
|
### Ejemplo rápido
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstart', function(event) { alert(event.url); });
|
||||||
|
|
||||||
|
|
||||||
|
## removeEventListener
|
||||||
|
|
||||||
|
> Elimina un detector para un evento de la `InAppBrowser`.
|
||||||
|
|
||||||
|
ref.removeEventListener(eventname, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: referencia a la ventana de `InAppBrowser`. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **eventName**: dejar de escuchar para el evento. *(String)*
|
||||||
|
|
||||||
|
* **loadstart**: evento se desencadena cuando el `InAppBrowser` comienza a cargar una dirección URL.
|
||||||
|
* **loadstop**: evento desencadena cuando los acabados `InAppBrowser` cargar una dirección URL.
|
||||||
|
* **loaderror**: evento se desencadena cuando el `InAppBrowser` se encuentra con un error al cargar una dirección URL.
|
||||||
|
* **exit**: evento se desencadena cuando se cierra la ventana de `InAppBrowser`.
|
||||||
|
|
||||||
|
* **callback**: la función a ejecutar cuando se desencadene el evento. La función se pasa un objeto `InAppBrowserEvent`.
|
||||||
|
|
||||||
|
### Plataformas soportadas
|
||||||
|
|
||||||
|
* Amazon fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 y 8.1
|
||||||
|
* Windows Phone 7 y 8
|
||||||
|
|
||||||
|
### Ejemplo rápido
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
var myCallback = function(event) { alert(event.url); }
|
||||||
|
ref.addEventListener('loadstart', myCallback);
|
||||||
|
ref.removeEventListener('loadstart', myCallback);
|
||||||
|
|
||||||
|
|
||||||
|
## close
|
||||||
|
|
||||||
|
> Cierra la ventana de `InAppBrowser`.
|
||||||
|
|
||||||
|
ref.close();
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: referencia a la ventana de `InAppBrowser` *(InAppBrowser)*
|
||||||
|
|
||||||
|
### Plataformas soportadas
|
||||||
|
|
||||||
|
* Amazon fire OS
|
||||||
|
* Android
|
||||||
|
* Firefox OS
|
||||||
|
* iOS
|
||||||
|
* Windows 8 y 8.1
|
||||||
|
* Windows Phone 7 y 8
|
||||||
|
|
||||||
|
### Ejemplo rápido
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.close();
|
||||||
|
|
||||||
|
|
||||||
|
## show
|
||||||
|
|
||||||
|
> Muestra una ventana InAppBrowser que abrió sus puertas ocultada. Esto no tiene efecto si el InAppBrowser ya era visible.
|
||||||
|
|
||||||
|
ref.show();
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: referencia a la (ventana) InAppBrowser`InAppBrowser`)
|
||||||
|
|
||||||
|
### Plataformas soportadas
|
||||||
|
|
||||||
|
* Amazon fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 y 8.1
|
||||||
|
|
||||||
|
### Ejemplo rápido
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'hidden=yes');
|
||||||
|
// some time later...
|
||||||
|
ref.show();
|
||||||
|
|
||||||
|
|
||||||
|
## executeScript
|
||||||
|
|
||||||
|
> Inyecta código JavaScript en la ventana de `InAppBrowser`
|
||||||
|
|
||||||
|
ref.executeScript(details, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: referencia a la ventana de `InAppBrowser`. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **injectDetails**: detalles de la secuencia de comandos para ejecutar, o especificar un `file` o `code` clave. *(Objeto)*
|
||||||
|
|
||||||
|
* **file**: URL del script para inyectar.
|
||||||
|
* **code**: texto de la escritura para inyectar.
|
||||||
|
|
||||||
|
* **devolución de llamada**: la función que se ejecuta después de inyecta el código JavaScript.
|
||||||
|
|
||||||
|
* Si el script inyectado es del tipo de `code`, la devolución de llamada se ejecuta con un solo parámetro, que es el valor devuelto del guión, envuelto en una `Array`. Para scripts multilíneas, este es el valor devuelto de la última declaración, o la última expresión evaluada.
|
||||||
|
|
||||||
|
### Plataformas soportadas
|
||||||
|
|
||||||
|
* Amazon fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 y 8.1
|
||||||
|
|
||||||
|
### Ejemplo rápido
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.executeScript({file: "myscript.js"});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
## insertCSS
|
||||||
|
|
||||||
|
> Inyecta CSS en la ventana de `InAppBrowser`.
|
||||||
|
|
||||||
|
ref.insertCSS(details, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: referencia a la ventana de `InAppBrowser` *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **injectDetails**: detalles de la secuencia de comandos para ejecutar, o especificar un `file` o `code` clave. *(Objeto)*
|
||||||
|
|
||||||
|
* **file**: URL de la hoja de estilos para inyectar.
|
||||||
|
* **code**: texto de la hoja de estilos para inyectar.
|
||||||
|
|
||||||
|
* **callback**: la función que se ejecuta después de inyectar el CSS.
|
||||||
|
|
||||||
|
### Plataformas soportadas
|
||||||
|
|
||||||
|
* Amazon fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
|
||||||
|
### Ejemplo rápido
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.insertCSS({file: "mystyles.css"});
|
||||||
|
});
|
||||||
+330
@@ -0,0 +1,330 @@
|
|||||||
|
<!---
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
# org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
|
Ce plugin vous offre une vue de navigateur web qui s'affiche lors de l'appel`window.open()`.
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
|
||||||
|
|
||||||
|
**Remarque**: InAppBrowser la fenêtre se comporte comme un navigateur web standard et ne peut pas accéder aux APIs Cordova.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
cordova plugin add org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
|
|
||||||
|
## window.open
|
||||||
|
|
||||||
|
Ouvre une URL dans une nouvelle `InAppBrowser` instance, l'instance de navigateur actuelle ou dans l'Explorateur du système.
|
||||||
|
|
||||||
|
var ref = window.open(url, target, options);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref** : référence à la fenêtre `InAppBrowser`. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **url** : l'URL à charger *(String)*. À encoder au préalable via `encodeURI()` si celle-ci contient des caractères Unicode.
|
||||||
|
|
||||||
|
* **target** : la cible du chargement de l'URL, ce paramètre est optionnel, sa valeur par défaut est `_self`. *(String)*
|
||||||
|
|
||||||
|
* `_self` : dirige le chargement vers la WebView Cordova si l'URL figure dans la liste blanche, sinon dans une fenêtre `InAppBrowser`.
|
||||||
|
* `_blank` : dirige le chargement vers une fenêtre `InAppBrowser`.
|
||||||
|
* `_system` : dirige le chargement vers le navigateur Web du système.
|
||||||
|
|
||||||
|
* **options** : permet de personnaliser la fenêtre `InAppBrowser`. Paramètre facultatif dont la valeur par défaut est `location=yes`. *(String)*
|
||||||
|
|
||||||
|
La chaîne `options` ne doit contenir aucun caractère vide, chaque paire nom/valeur représentant une fonctionnalité doit être séparée de la précédente par une virgule. Les noms de fonctionnalités sont sensibles à la casse. Toutes les plates-formes prennent en charge la valeur ci-dessous :
|
||||||
|
|
||||||
|
* **location** : régler à `yes` ou `no` afin d'afficher ou masquer la barre d'adresse de la fenêtre `InAppBrowser`.
|
||||||
|
|
||||||
|
Android uniquement :
|
||||||
|
|
||||||
|
* **closebuttoncaption**: affectez une chaîne à utiliser comme la **fait** légende du bouton.
|
||||||
|
* **caché**: la valeur `yes` pour créer le navigateur et charger la page, mais ne pas le montrer. L'événement loadstop est déclenché lorsque le chargement est terminé. Omettre ou la valeur `no` (par défaut) pour que le navigateur ouvrir et charger normalement.
|
||||||
|
* **ClearCache**: la valeur `yes` pour que le navigateur du cache de cookie effacé, avant l'ouverture de la nouvelle fenêtre
|
||||||
|
* **clearsessioncache**: la valeur `yes` pour avoir le cache de cookie de session autorisé avant l'ouverture de la nouvelle fenêtre
|
||||||
|
|
||||||
|
iOS uniquement :
|
||||||
|
|
||||||
|
* **closebuttoncaption**: affectez une chaîne à utiliser comme la **fait** légende du bouton. Notez que vous devrez localiser cette valeur vous-même.
|
||||||
|
* **disallowoverscroll**: la valeur `yes` ou `no` (valeur par défaut est `no` ). Active/désactive la propriété UIWebViewBounce.
|
||||||
|
* **caché**: la valeur `yes` pour créer le navigateur et charger la page, mais ne pas le montrer. L'événement loadstop est déclenché lorsque le chargement est terminé. Omettre ou la valeur `no` (par défaut) pour que le navigateur ouvrir et charger normalement.
|
||||||
|
* **ClearCache**: la valeur `yes` pour que le navigateur du cache de cookie effacé, avant l'ouverture de la nouvelle fenêtre
|
||||||
|
* **clearsessioncache**: la valeur `yes` pour avoir le cache de cookie de session autorisé avant l'ouverture de la nouvelle fenêtre
|
||||||
|
* **barre d'outils**: la valeur `yes` ou `no` pour activer la barre d'outils ou désactiver pour le InAppBrowser (par défaut,`yes`)
|
||||||
|
* **enableViewportScale**: la valeur `yes` ou `no` pour empêcher la fenêtre de mise à l'échelle par une balise meta (par défaut,`no`).
|
||||||
|
* **mediaPlaybackRequiresUserAction**: la valeur `yes` ou `no` pour empêcher le HTML5 audio ou vidéo de la lecture automatique (par défaut,`no`).
|
||||||
|
* **allowInlineMediaPlayback**: la valeur `yes` ou `no` pour permettre la lecture du média en ligne HTML5, affichage dans la fenêtre du navigateur plutôt que d'une interface de lecture spécifique au périphérique. L'HTML `video` élément doit également inclure la `webkit-playsinline` attribut (par défaut,`no`)
|
||||||
|
* **keyboardDisplayRequiresUserAction**: la valeur `yes` ou `no` pour ouvrir le clavier lorsque les éléments reçoivent le focus par l'intermédiaire de JavaScript `focus()` appel (par défaut,`yes`).
|
||||||
|
* **suppressesIncrementalRendering**: la valeur `yes` ou `no` d'attendre que toutes les nouveautés de vue sont reçue avant d'être restitué (par défaut,`no`).
|
||||||
|
* **presentationstyle**: la valeur `pagesheet` , `formsheet` ou `fullscreen` pour définir le [style de présentation][1] (par défaut,`fullscreen`).
|
||||||
|
* **transitionstyle**: la valeur `fliphorizontal` , `crossdissolve` ou `coververtical` pour définir le [style de transition][2] (par défaut,`coververtical`).
|
||||||
|
* **toolbarposition**: la valeur `top` ou `bottom` (valeur par défaut est `bottom` ). Causes de la barre d'outils être en haut ou en bas de la fenêtre.
|
||||||
|
|
||||||
|
Windows uniquement :
|
||||||
|
|
||||||
|
* **caché**: la valeur `yes` pour créer le navigateur et charger la page, mais ne pas le montrer. L'événement loadstop est déclenché lorsque le chargement est terminé. Omettre ou la valeur `no` (par défaut) pour que le navigateur ouvrir et charger normalement.
|
||||||
|
|
||||||
|
[1]: http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalPresentationStyle
|
||||||
|
[2]: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalTransitionStyle
|
||||||
|
|
||||||
|
### Plates-formes prises en charge
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* BlackBerry 10
|
||||||
|
* Firefox OS
|
||||||
|
* iOS
|
||||||
|
* Windows 8 et 8.1
|
||||||
|
* Windows Phone 7 et 8
|
||||||
|
|
||||||
|
### Exemple
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
var ref2 = window.open(encodeURI('http://ja.m.wikipedia.org/wiki/ハングル'), '_blank', 'location=yes');
|
||||||
|
|
||||||
|
|
||||||
|
### Firefox OS Quirks
|
||||||
|
|
||||||
|
Comme plugin n'est pas appliquer n'importe quelle conception il est nécessaire d'ajouter quelques règles CSS si ouvert avec `target='_blank'` . Les règles pourraient ressembler à ces
|
||||||
|
|
||||||
|
css
|
||||||
|
.inAppBrowserWrap {
|
||||||
|
background-color: rgba(0,0,0,0.75);
|
||||||
|
color: rgba(235,235,235,1.0);
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu {
|
||||||
|
overflow: auto;
|
||||||
|
list-style-type: none;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu li {
|
||||||
|
font-size: 25px;
|
||||||
|
height: 25px;
|
||||||
|
float: left;
|
||||||
|
margin: 0 10px;
|
||||||
|
padding: 3px 10px;
|
||||||
|
text-decoration: none;
|
||||||
|
color: #ccc;
|
||||||
|
display: block;
|
||||||
|
background: rgba(30,30,30,0.50);
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu li.disabled {
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
## InAppBrowser
|
||||||
|
|
||||||
|
L'objet retourné par un appel à`window.open`.
|
||||||
|
|
||||||
|
### Méthodes
|
||||||
|
|
||||||
|
* addEventListener
|
||||||
|
* removeEventListener
|
||||||
|
* close
|
||||||
|
* show
|
||||||
|
* executeScript
|
||||||
|
* insertCSS
|
||||||
|
|
||||||
|
## addEventListener
|
||||||
|
|
||||||
|
> Ajoute un écouteur pour un évènement de la fenêtre `InAppBrowser`.
|
||||||
|
|
||||||
|
ref.addEventListener(eventname, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref** : référence à la fenêtre `InAppBrowser`. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **eventname** : l'évènement à écouter *(String)*
|
||||||
|
|
||||||
|
* **loadstart** : évènement déclenché lorsque le chargement d'une URL débute dans la fenêtre `InAppBrowser`.
|
||||||
|
* **loadstop** : évènement déclenché lorsque la fenêtre `InAppBrowser` finit de charger une URL.
|
||||||
|
* **loaderror** : évènement déclenché si la fenêtre `InAppBrowser` rencontre une erreur lors du chargement d'une URL.
|
||||||
|
* **exit** : évènement déclenché lorsque la fenêtre `InAppBrowser` est fermée.
|
||||||
|
|
||||||
|
* **callback** : la fonction à exécuter lorsque l'évènement se déclenche. Un objet `InAppBrowserEvent` lui est transmis comme paramètre.
|
||||||
|
|
||||||
|
### Propriétés de InAppBrowserEvent
|
||||||
|
|
||||||
|
* **type** : le nom de l'évènement, soit `loadstart`, `loadstop`, `loaderror` ou `exit`. *(String)*
|
||||||
|
|
||||||
|
* **url** : l'URL ayant été chargée. *(String)*
|
||||||
|
|
||||||
|
* **code** : le code d'erreur, seulement pour `loaderror`. *(Number)*
|
||||||
|
|
||||||
|
* **message** : un message d'erreur, seulement pour `loaderror`. *(String)*
|
||||||
|
|
||||||
|
### Plates-formes prises en charge
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 et 8.1
|
||||||
|
* Windows Phone 7 et 8
|
||||||
|
|
||||||
|
### Petit exemple
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstart', function(event) { alert(event.url); });
|
||||||
|
|
||||||
|
|
||||||
|
## removeEventListener
|
||||||
|
|
||||||
|
> Supprime un écouteur pour un évènement de la fenêtre `InAppBrowser`.
|
||||||
|
|
||||||
|
ref.removeEventListener(eventname, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref** : référence à la fenêtre `InAppBrowser`. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **eventname** : l'évènement pour lequel arrêter l'écoute. *(String)*
|
||||||
|
|
||||||
|
* **loadstart**: événement déclenche quand le `InAppBrowser` commence à charger une URL.
|
||||||
|
* **loadstop**: événement déclenche lorsque la `InAppBrowser` finit de charger une URL.
|
||||||
|
* **loaderror** : évènement déclenché si la fenêtre `InAppBrowser` rencontre une erreur lors du chargement d'une URL.
|
||||||
|
* **sortie**: événement déclenche quand le `InAppBrowser` fenêtre est fermée.
|
||||||
|
|
||||||
|
* **callback** : la fonction à exécuter lorsque l'évènement se déclenche. Un objet `InAppBrowserEvent` lui est transmis comme paramètre.
|
||||||
|
|
||||||
|
### Plates-formes prises en charge
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 et 8.1
|
||||||
|
* Windows Phone 7 et 8
|
||||||
|
|
||||||
|
### Petit exemple
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
var myCallback = function(event) { alert(event.url); }
|
||||||
|
ref.addEventListener('loadstart', myCallback);
|
||||||
|
ref.removeEventListener('loadstart', myCallback);
|
||||||
|
|
||||||
|
|
||||||
|
## close
|
||||||
|
|
||||||
|
> Ferme la fenêtre `InAppBrowser`.
|
||||||
|
|
||||||
|
Ref.Close() ;
|
||||||
|
|
||||||
|
|
||||||
|
* **Réf**: référence à la `InAppBrowser` fenêtre *(InAppBrowser)*
|
||||||
|
|
||||||
|
### Plates-formes prises en charge
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* Firefox OS
|
||||||
|
* iOS
|
||||||
|
* Windows 8 et 8.1
|
||||||
|
* Windows Phone 7 et 8
|
||||||
|
|
||||||
|
### Petit exemple
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.close();
|
||||||
|
|
||||||
|
|
||||||
|
## show
|
||||||
|
|
||||||
|
> Affiche une fenêtre InAppBrowser qui a été ouverte cachée. Appeler cette méthode n'a aucun effet si la fenêtre en question est déjà visible.
|
||||||
|
|
||||||
|
Ref.Show() ;
|
||||||
|
|
||||||
|
|
||||||
|
* **Réf**: référence à la fenêtre () InAppBrowser`InAppBrowser`)
|
||||||
|
|
||||||
|
### Plates-formes prises en charge
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 et 8.1
|
||||||
|
|
||||||
|
### Petit exemple
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'hidden=yes');
|
||||||
|
// some time later...
|
||||||
|
ref.show();
|
||||||
|
|
||||||
|
|
||||||
|
## executeScript
|
||||||
|
|
||||||
|
> Injecte du code JavaScript dans la fenêtre `InAppBrowser`
|
||||||
|
|
||||||
|
ref.executeScript(details, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **Réf**: référence à la `InAppBrowser` fenêtre. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **injectDetails** : détails du script à exécuter, requérant une propriété `file` ou `code`. *(Object)*
|
||||||
|
|
||||||
|
* **file** : URL du script à injecter.
|
||||||
|
* **code** : texte du script à injecter.
|
||||||
|
|
||||||
|
* **callback** : une fonction exécutée après l'injection du code JavaScript.
|
||||||
|
|
||||||
|
* Si le script injecté est de type `code`, un seul paramètre est transmis à la fonction callback, correspondant à la valeur de retour du script enveloppée dans un `Array`. Pour les scripts multilignes, il s'agit de la valeur renvoyée par la dernière instruction ou la dernière expression évaluée.
|
||||||
|
|
||||||
|
### Plates-formes prises en charge
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 et 8.1
|
||||||
|
|
||||||
|
### Petit exemple
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.executeScript({file: "myscript.js"});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
## insertCSS
|
||||||
|
|
||||||
|
> Injecte des règles CSS dans la fenêtre `InAppBrowser`.
|
||||||
|
|
||||||
|
ref.insertCSS(details, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **Réf**: référence à la `InAppBrowser` fenêtre *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **injectDetails**: Détails du script à exécuter, spécifiant soit un `file` ou `code` clés. *(Objet)*
|
||||||
|
|
||||||
|
* **file** : URL de la feuille de style à injecter.
|
||||||
|
* **code** : contenu de la feuille de style à injecter.
|
||||||
|
|
||||||
|
* **callback** : une fonction exécutée après l'injection du fichier CSS.
|
||||||
|
|
||||||
|
### Plates-formes prises en charge
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
|
||||||
|
### Petit exemple
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.insertCSS({file: "mystyles.css"});
|
||||||
|
});
|
||||||
+68
-14
@@ -19,12 +19,27 @@
|
|||||||
|
|
||||||
# org.apache.cordova.inappbrowser
|
# org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
This plugin provides a web browser view that displays when calling `window.open()`, or when opening a link formed as `<a target="_blank">`.
|
This plugin provides a web browser view that displays when calling `window.open()`.
|
||||||
|
|
||||||
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
|
||||||
__NOTE__: The InAppBrowser window behaves like a standard web browser,
|
The InAppBrowser window behaves like a standard web browser,
|
||||||
and can't access Cordova APIs.
|
and can't access Cordova APIs. For this reason, the InAppBrowser is recommended
|
||||||
|
if you need to load third-party (untrusted) content, instead of loading that
|
||||||
|
into the main Cordova webview. The InAppBrowser is not subject to the
|
||||||
|
whitelist, nor is opening links in the system browser.
|
||||||
|
|
||||||
|
The InAppBrowser provides by default its own GUI controls for the user (back,
|
||||||
|
forward, done).
|
||||||
|
|
||||||
|
This plugin hooks `window.open`.
|
||||||
|
|
||||||
|
Although `window.open` is in the global scope, InAppBrowser is not available until after the `deviceready` event.
|
||||||
|
|
||||||
|
document.addEventListener("deviceready", onDeviceReady, false);
|
||||||
|
function onDeviceReady() {
|
||||||
|
console.log("window.open works well");
|
||||||
|
}
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
@@ -55,8 +70,7 @@ instance, or the system browser.
|
|||||||
|
|
||||||
Android only:
|
Android only:
|
||||||
|
|
||||||
- __closebuttoncaption__: set to a string to use as the __Done__ button's caption.
|
- __hidden__: set to `yes` to create the browser and load the page, but not show it. The 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 load event fires when loading is complete. Omit or set to `no` (default) to have the browser open and load normally.
|
|
||||||
- __clearcache__: set to `yes` to have the browser's cookie cache cleared before the new window is opened
|
- __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
|
||||||
|
|
||||||
@@ -64,7 +78,9 @@ instance, or the system browser.
|
|||||||
|
|
||||||
- __closebuttoncaption__: set to a string to use as the __Done__ button's caption. Note that you need to localize this value yourself.
|
- __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.
|
- __disallowoverscroll__: Set to `yes` or `no` (default is `no`). Turns on/off the UIWebViewBounce property.
|
||||||
- __hidden__: set to `yes` to create the browser and load the page, but not show it. The load event fires when loading is complete. Omit or set to `no` (default) to have the browser open and load normally.
|
- __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
|
||||||
|
- __clearsessioncache__: set to `yes` to have the session cookie cache cleared before the new window is opened
|
||||||
- __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` or `no` to prevent HTML5 audio or video from autoplaying (defaults to `no`).
|
- __mediaPlaybackRequiresUserAction__: Set to `yes` or `no` to prevent HTML5 audio or video from autoplaying (defaults to `no`).
|
||||||
@@ -75,12 +91,18 @@ 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:
|
||||||
|
|
||||||
|
- __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.
|
||||||
|
|
||||||
### Supported Platforms
|
### Supported Platforms
|
||||||
|
|
||||||
- Amazon Fire OS
|
- Amazon Fire OS
|
||||||
- Android
|
- Android
|
||||||
- BlackBerry 10
|
- BlackBerry 10
|
||||||
|
- Firefox OS
|
||||||
- iOS
|
- iOS
|
||||||
|
- Windows 8 and 8.1
|
||||||
- Windows Phone 7 and 8
|
- Windows Phone 7 and 8
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
@@ -88,6 +110,38 @@ instance, or the system browser.
|
|||||||
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
var ref2 = window.open(encodeURI('http://ja.m.wikipedia.org/wiki/ハングル'), '_blank', 'location=yes');
|
var ref2 = window.open(encodeURI('http://ja.m.wikipedia.org/wiki/ハングル'), '_blank', 'location=yes');
|
||||||
|
|
||||||
|
### Firefox OS Quirks
|
||||||
|
|
||||||
|
As plugin doesn't enforce any design there is a need to add some CSS rules if
|
||||||
|
opened with `target='_blank'`. The rules might look like these
|
||||||
|
|
||||||
|
``` css
|
||||||
|
.inAppBrowserWrap {
|
||||||
|
background-color: rgba(0,0,0,0.75);
|
||||||
|
color: rgba(235,235,235,1.0);
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu {
|
||||||
|
overflow: auto;
|
||||||
|
list-style-type: none;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu li {
|
||||||
|
font-size: 25px;
|
||||||
|
height: 25px;
|
||||||
|
float: left;
|
||||||
|
margin: 0 10px;
|
||||||
|
padding: 3px 10px;
|
||||||
|
text-decoration: none;
|
||||||
|
color: #ccc;
|
||||||
|
display: block;
|
||||||
|
background: rgba(30,30,30,0.50);
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu li.disabled {
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## InAppBrowser
|
## InAppBrowser
|
||||||
|
|
||||||
The object returned from a call to `window.open`.
|
The object returned from a call to `window.open`.
|
||||||
@@ -133,14 +187,14 @@ The object returned from a call to `window.open`.
|
|||||||
|
|
||||||
- Amazon Fire OS
|
- Amazon Fire OS
|
||||||
- Android
|
- Android
|
||||||
- BlackBerry 10
|
|
||||||
- iOS
|
- iOS
|
||||||
|
- Windows 8 and 8.1
|
||||||
- Windows Phone 7 and 8
|
- Windows Phone 7 and 8
|
||||||
|
|
||||||
### Quick Example
|
### Quick Example
|
||||||
|
|
||||||
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
ref.addEventListener('loadstart', function() { alert(event.url); });
|
ref.addEventListener('loadstart', function(event) { alert(event.url); });
|
||||||
|
|
||||||
## removeEventListener
|
## removeEventListener
|
||||||
|
|
||||||
@@ -164,14 +218,14 @@ The function is passed an `InAppBrowserEvent` object.
|
|||||||
|
|
||||||
- Amazon Fire OS
|
- Amazon Fire OS
|
||||||
- Android
|
- Android
|
||||||
- BlackBerry 10
|
|
||||||
- iOS
|
- iOS
|
||||||
|
- Windows 8 and 8.1
|
||||||
- Windows Phone 7 and 8
|
- Windows Phone 7 and 8
|
||||||
|
|
||||||
### Quick Example
|
### Quick Example
|
||||||
|
|
||||||
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
var myCallback = function() { alert(event.url); }
|
var myCallback = function(event) { alert(event.url); }
|
||||||
ref.addEventListener('loadstart', myCallback);
|
ref.addEventListener('loadstart', myCallback);
|
||||||
ref.removeEventListener('loadstart', myCallback);
|
ref.removeEventListener('loadstart', myCallback);
|
||||||
|
|
||||||
@@ -187,8 +241,9 @@ The function is passed an `InAppBrowserEvent` object.
|
|||||||
|
|
||||||
- Amazon Fire OS
|
- Amazon Fire OS
|
||||||
- Android
|
- Android
|
||||||
- BlackBerry 10
|
- Firefox OS
|
||||||
- iOS
|
- iOS
|
||||||
|
- Windows 8 and 8.1
|
||||||
- Windows Phone 7 and 8
|
- Windows Phone 7 and 8
|
||||||
|
|
||||||
### Quick Example
|
### Quick Example
|
||||||
@@ -208,8 +263,8 @@ The function is passed an `InAppBrowserEvent` object.
|
|||||||
|
|
||||||
- Amazon Fire OS
|
- Amazon Fire OS
|
||||||
- Android
|
- Android
|
||||||
- BlackBerry 10
|
|
||||||
- iOS
|
- iOS
|
||||||
|
- Windows 8 and 8.1
|
||||||
|
|
||||||
### Quick Example
|
### Quick Example
|
||||||
|
|
||||||
@@ -240,8 +295,8 @@ The function is passed an `InAppBrowserEvent` object.
|
|||||||
|
|
||||||
- Amazon Fire OS
|
- Amazon Fire OS
|
||||||
- Android
|
- Android
|
||||||
- BlackBerry 10
|
|
||||||
- iOS
|
- iOS
|
||||||
|
- Windows 8 and 8.1
|
||||||
|
|
||||||
### Quick Example
|
### Quick Example
|
||||||
|
|
||||||
@@ -268,7 +323,6 @@ The function is passed an `InAppBrowserEvent` object.
|
|||||||
|
|
||||||
- Amazon Fire OS
|
- Amazon Fire OS
|
||||||
- Android
|
- Android
|
||||||
- BlackBerry 10
|
|
||||||
- iOS
|
- iOS
|
||||||
|
|
||||||
### Quick Example
|
### Quick Example
|
||||||
|
|||||||
+330
@@ -0,0 +1,330 @@
|
|||||||
|
<!---
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
# org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
|
Questo plugin fornisce una vista di browser web che viene visualizzata quando si chiama`window.open()`.
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
|
||||||
|
|
||||||
|
**Nota**: il InAppBrowser finestra si comporta come un browser web standard e non può accedere a Cordova APIs.
|
||||||
|
|
||||||
|
## Installazione
|
||||||
|
|
||||||
|
cordova plugin add org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
|
|
||||||
|
## window.open
|
||||||
|
|
||||||
|
Apre un URL in una nuova `InAppBrowser` istanza, l'istanza corrente del browser o il browser di sistema.
|
||||||
|
|
||||||
|
var ref = window.open(url, target, options);
|
||||||
|
|
||||||
|
|
||||||
|
* **Rif**: fare riferimento alla `InAppBrowser` finestra. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **URL**: l'URL da caricare *(String)*. Chiamare `encodeURI()` su questo, se l'URL contiene caratteri Unicode.
|
||||||
|
|
||||||
|
* **destinazione**: la destinazione in cui caricare l'URL, un parametro facoltativo che il valore predefinito è `_self` . *(String)*
|
||||||
|
|
||||||
|
* `_self`: Si apre in Cordova WebView se l'URL è nella lista bianca, altrimenti si apre nella`InAppBrowser`.
|
||||||
|
* `_blank`: Apre il`InAppBrowser`.
|
||||||
|
* `_system`: Si apre nel browser web del sistema.
|
||||||
|
|
||||||
|
* **opzioni**: opzioni per il `InAppBrowser` . Opzionale, inadempiente a: `location=yes` . *(String)*
|
||||||
|
|
||||||
|
Il `options` stringa non deve contenere alcun spazio vuoto, e coppie nome/valore ogni funzionalità devono essere separate da una virgola. Caratteristica nomi sono tra maiuscole e minuscole. Tutte le piattaforme supportano il valore riportato di seguito:
|
||||||
|
|
||||||
|
* **posizione**: impostata su `yes` o `no` per trasformare il `InAppBrowser` di barra di posizione on o off.
|
||||||
|
|
||||||
|
Solo su Android:
|
||||||
|
|
||||||
|
* **closebuttoncaption**: impostare una stringa da utilizzare come didascalia del pulsante **fatto** .
|
||||||
|
* **nascosti**: impostare su `yes` per creare il browser e caricare la pagina, ma non mostrarlo. L'evento loadstop viene generato quando il caricamento è completato. Omettere o impostata su `no` (impostazione predefinita) per avere il browser aperto e caricare normalmente.
|
||||||
|
* **ClearCache**: impostare su `yes` per avere il browser di cookie cache cancellata prima dell'apertura della nuova finestra
|
||||||
|
* **clearsessioncache**: impostare su `yes` per avere la cache cookie di sessione cancellata prima dell'apertura della nuova finestra
|
||||||
|
|
||||||
|
solo iOS:
|
||||||
|
|
||||||
|
* **closebuttoncaption**: impostare una stringa da utilizzare come didascalia del pulsante **fatto** . Si noti che è necessario localizzare questo valore a te stesso.
|
||||||
|
* **disallowoverscroll**: impostare su `yes` o `no` (default è `no` ). Attiva/disattiva la proprietà UIWebViewBounce.
|
||||||
|
* **nascosti**: impostare su `yes` per creare il browser e caricare la pagina, ma non mostrarlo. L'evento loadstop viene generato quando il caricamento è completato. Omettere o impostata su `no` (impostazione predefinita) per avere il browser aperto e caricare normalmente.
|
||||||
|
* **ClearCache**: impostare su `yes` per avere il browser cache cookie ha lasciata prima dell'apertura della nuova finestra
|
||||||
|
* **clearsessioncache**: impostare su `yes` per avere la cache cookie di sessione cancellata prima dell'apertura della nuova finestra
|
||||||
|
* **Toolbar**: impostare su `yes` o `no` per attivare la barra degli strumenti o disattivare per il InAppBrowser (default`yes`)
|
||||||
|
* **enableViewportScale**: impostare su `yes` o `no` per impedire la viewport ridimensionamento tramite un tag meta (default`no`).
|
||||||
|
* **mediaPlaybackRequiresUserAction**: impostare su `yes` o `no` per impedire HTML5 audio o video da AutoPlay (default`no`).
|
||||||
|
* **allowInlineMediaPlayback**: impostare su `yes` o `no` per consentire la riproduzione dei supporti HTML5 in linea, visualizzare all'interno della finestra del browser, piuttosto che un'interfaccia specifica del dispositivo di riproduzione. L'HTML `video` elemento deve includere anche il `webkit-playsinline` (default di attributo`no`)
|
||||||
|
* **keyboardDisplayRequiresUserAction**: impostare su `yes` o `no` per aprire la tastiera quando elementi form ricevano lo stato attivo tramite di JavaScript `focus()` chiamata (default`yes`).
|
||||||
|
* **suppressesIncrementalRendering**: impostare su `yes` o `no` aspettare fino a quando tutti i nuovi contenuti di vista viene ricevuto prima il rendering (default`no`).
|
||||||
|
* **presentationstyle**: impostare su `pagesheet` , `formsheet` o `fullscreen` per impostare lo [stile di presentazione][1] (default`fullscreen`).
|
||||||
|
* **transitionstyle**: impostare su `fliphorizontal` , `crossdissolve` o `coververtical` per impostare lo [stile di transizione][2] (default`coververtical`).
|
||||||
|
* **toolbarposition**: impostare su `top` o `bottom` (default è `bottom` ). Provoca la barra degli strumenti sia nella parte superiore o inferiore della finestra.
|
||||||
|
|
||||||
|
Solo per Windows:
|
||||||
|
|
||||||
|
* **nascosti**: impostare su `yes` per creare il browser e caricare la pagina, ma non mostrarlo. L'evento loadstop viene generato quando il caricamento è completato. Omettere o impostata su `no` (impostazione predefinita) per avere il browser aperto e caricare normalmente.
|
||||||
|
|
||||||
|
[1]: http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalPresentationStyle
|
||||||
|
[2]: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalTransitionStyle
|
||||||
|
|
||||||
|
### Piattaforme supportate
|
||||||
|
|
||||||
|
* Amazon fuoco OS
|
||||||
|
* Android
|
||||||
|
* BlackBerry 10
|
||||||
|
* Firefox OS
|
||||||
|
* iOS
|
||||||
|
* Windows 8 e 8.1
|
||||||
|
* Windows Phone 7 e 8
|
||||||
|
|
||||||
|
### Esempio
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
var ref2 = window.open(encodeURI('http://ja.m.wikipedia.org/wiki/ハングル'), '_blank', 'location=yes');
|
||||||
|
|
||||||
|
|
||||||
|
### Firefox OS stranezze
|
||||||
|
|
||||||
|
Come plugin non imporre alcun disegno c'è bisogno di aggiungere alcune regole CSS se aperto con `target='_blank'` . Le regole potrebbero apparire come questi
|
||||||
|
|
||||||
|
css
|
||||||
|
.inAppBrowserWrap {
|
||||||
|
background-color: rgba(0,0,0,0.75);
|
||||||
|
color: rgba(235,235,235,1.0);
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu {
|
||||||
|
overflow: auto;
|
||||||
|
list-style-type: none;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu li {
|
||||||
|
font-size: 25px;
|
||||||
|
height: 25px;
|
||||||
|
float: left;
|
||||||
|
margin: 0 10px;
|
||||||
|
padding: 3px 10px;
|
||||||
|
text-decoration: none;
|
||||||
|
color: #ccc;
|
||||||
|
display: block;
|
||||||
|
background: rgba(30,30,30,0.50);
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu li.disabled {
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
## InAppBrowser
|
||||||
|
|
||||||
|
L'oggetto restituito da una chiamata a`window.open`.
|
||||||
|
|
||||||
|
### Metodi
|
||||||
|
|
||||||
|
* addEventListener
|
||||||
|
* removeEventListener
|
||||||
|
* close
|
||||||
|
* show
|
||||||
|
* executeScript
|
||||||
|
* insertCSS
|
||||||
|
|
||||||
|
## addEventListener
|
||||||
|
|
||||||
|
> Aggiunge un listener per un evento dal`InAppBrowser`.
|
||||||
|
|
||||||
|
ref.addEventListener(eventname, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **Rif**: fare riferimento alla `InAppBrowser` finestra *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **EventName**: l'evento per l'ascolto *(String)*
|
||||||
|
|
||||||
|
* **loadstart**: evento viene generato quando il `InAppBrowser` comincia a caricare un URL.
|
||||||
|
* **loadstop**: evento viene generato quando il `InAppBrowser` termina il caricamento di un URL.
|
||||||
|
* **LoadError**: evento viene generato quando il `InAppBrowser` rileva un errore durante il caricamento di un URL.
|
||||||
|
* **uscita**: evento viene generato quando il `InAppBrowser` finestra è chiusa.
|
||||||
|
|
||||||
|
* **richiamata**: la funzione che viene eseguito quando viene generato l'evento. La funzione viene passata un `InAppBrowserEvent` oggetto come parametro.
|
||||||
|
|
||||||
|
### Proprietà InAppBrowserEvent
|
||||||
|
|
||||||
|
* **tipo**: il eventname, o `loadstart` , `loadstop` , `loaderror` , o `exit` . *(String)*
|
||||||
|
|
||||||
|
* **URL**: l'URL che è stato caricato. *(String)*
|
||||||
|
|
||||||
|
* **codice**: il codice di errore, solo nel caso di `loaderror` . *(Numero)*
|
||||||
|
|
||||||
|
* **messaggio**: il messaggio di errore, solo nel caso di `loaderror` . *(String)*
|
||||||
|
|
||||||
|
### Piattaforme supportate
|
||||||
|
|
||||||
|
* Amazon fuoco OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 e 8.1
|
||||||
|
* Windows Phone 7 e 8
|
||||||
|
|
||||||
|
### Esempio rapido
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstart', function(event) { alert(event.url); });
|
||||||
|
|
||||||
|
|
||||||
|
## removeEventListener
|
||||||
|
|
||||||
|
> Rimuove un listener per un evento dal`InAppBrowser`.
|
||||||
|
|
||||||
|
ref.removeEventListener(eventname, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **Rif**: fare riferimento alla `InAppBrowser` finestra. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **EventName**: interrompere l'attesa per l'evento. *(String)*
|
||||||
|
|
||||||
|
* **loadstart**: evento viene generato quando il `InAppBrowser` comincia a caricare un URL.
|
||||||
|
* **loadstop**: evento viene generato quando il `InAppBrowser` termina il caricamento di un URL.
|
||||||
|
* **LoadError**: evento viene generato quando il `InAppBrowser` rileva un errore di caricamento di un URL.
|
||||||
|
* **uscita**: evento viene generato quando il `InAppBrowser` finestra è chiusa.
|
||||||
|
|
||||||
|
* **richiamata**: la funzione da eseguire quando viene generato l'evento. La funzione viene passata un `InAppBrowserEvent` oggetto.
|
||||||
|
|
||||||
|
### Piattaforme supportate
|
||||||
|
|
||||||
|
* Amazon fuoco OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 e 8.1
|
||||||
|
* Windows Phone 7 e 8
|
||||||
|
|
||||||
|
### Esempio rapido
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
var myCallback = function(event) { alert(event.url); }
|
||||||
|
ref.addEventListener('loadstart', myCallback);
|
||||||
|
ref.removeEventListener('loadstart', myCallback);
|
||||||
|
|
||||||
|
|
||||||
|
## close
|
||||||
|
|
||||||
|
> Chiude la `InAppBrowser` finestra.
|
||||||
|
|
||||||
|
Ref.Close();
|
||||||
|
|
||||||
|
|
||||||
|
* **Rif**: fare riferimento alla `InAppBrowser` finestra *(InAppBrowser)*
|
||||||
|
|
||||||
|
### Piattaforme supportate
|
||||||
|
|
||||||
|
* Amazon fuoco OS
|
||||||
|
* Android
|
||||||
|
* Firefox OS
|
||||||
|
* iOS
|
||||||
|
* Windows 8 e 8.1
|
||||||
|
* Windows Phone 7 e 8
|
||||||
|
|
||||||
|
### Esempio rapido
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.close();
|
||||||
|
|
||||||
|
|
||||||
|
## show
|
||||||
|
|
||||||
|
> Visualizza una finestra di InAppBrowser che è stato aperto nascosta. Questa chiamata non ha effetto se la InAppBrowser era già visibile.
|
||||||
|
|
||||||
|
Ref.Show();
|
||||||
|
|
||||||
|
|
||||||
|
* **Rif**: riferimento per il InAppBrowser finestra (`InAppBrowser`)
|
||||||
|
|
||||||
|
### Piattaforme supportate
|
||||||
|
|
||||||
|
* Amazon fuoco OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 e 8.1
|
||||||
|
|
||||||
|
### Esempio rapido
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'hidden=yes');
|
||||||
|
// some time later...
|
||||||
|
ref.show();
|
||||||
|
|
||||||
|
|
||||||
|
## executeScript
|
||||||
|
|
||||||
|
> Inserisce il codice JavaScript nella `InAppBrowser` finestra
|
||||||
|
|
||||||
|
ref.executeScript(details, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **Rif**: fare riferimento alla `InAppBrowser` finestra. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **injectDetails**: dettagli dello script da eseguire, specificando un `file` o `code` chiave. *(Oggetto)*
|
||||||
|
|
||||||
|
* **file**: URL dello script da iniettare.
|
||||||
|
* **codice**: testo dello script da iniettare.
|
||||||
|
|
||||||
|
* **richiamata**: la funzione che viene eseguito dopo che il codice JavaScript viene iniettato.
|
||||||
|
|
||||||
|
* Se lo script iniettato è di tipo `code` , il callback viene eseguita con un singolo parametro, che è il valore restituito del copione, avvolto in un `Array` . Per gli script multi-linea, questo è il valore restituito dell'ultima istruzione, o l'ultima espressione valutata.
|
||||||
|
|
||||||
|
### Piattaforme supportate
|
||||||
|
|
||||||
|
* Amazon fuoco OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 e 8.1
|
||||||
|
|
||||||
|
### Esempio rapido
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.executeScript({file: "myscript.js"});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
## insertCSS
|
||||||
|
|
||||||
|
> Inietta CSS nella `InAppBrowser` finestra.
|
||||||
|
|
||||||
|
ref.insertCSS(details, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **Rif**: fare riferimento alla `InAppBrowser` finestra *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **injectDetails**: dettagli dello script da eseguire, specificando un `file` o `code` chiave. *(Oggetto)*
|
||||||
|
|
||||||
|
* **file**: URL del foglio di stile per iniettare.
|
||||||
|
* **codice**: testo del foglio di stile per iniettare.
|
||||||
|
|
||||||
|
* **richiamata**: la funzione che viene eseguito dopo che il CSS viene iniettato.
|
||||||
|
|
||||||
|
### Piattaforme supportate
|
||||||
|
|
||||||
|
* Amazon fuoco OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
|
||||||
|
### Esempio rapido
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.insertCSS({file: "mystyles.css"});
|
||||||
|
});
|
||||||
+330
@@ -0,0 +1,330 @@
|
|||||||
|
<!---
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
# org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
|
このプラグインを呼び出すときに表示される web ブラウザーのビューを提供します`window.open()`.
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
|
||||||
|
|
||||||
|
**注**: ウィンドウの動作、InAppBrowser 標準的な web ブラウザーのようとコルドバの Api にアクセスできません。
|
||||||
|
|
||||||
|
## インストール
|
||||||
|
|
||||||
|
cordova plugin add org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
|
|
||||||
|
## window.open
|
||||||
|
|
||||||
|
新しい URL を開き `InAppBrowser` インスタンス、現在のブラウザー インスタンスまたはシステムのブラウザー。
|
||||||
|
|
||||||
|
var ref = window.open(url, target, options);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: への参照を `InAppBrowser` ウィンドウ。*(InAppBrowser)*
|
||||||
|
|
||||||
|
* **url**: *(文字列)*をロードする URL。電話 `encodeURI()` 場合は、この上の URL は Unicode 文字を含みます。
|
||||||
|
|
||||||
|
* **ターゲット**: ターゲット URL は、既定値は、省略可能なパラメーターをロードするを `_self` 。*(文字列)*
|
||||||
|
|
||||||
|
* `_self`: コルドバ WebView URL がホワイト リストにある場合で開きます、それ以外の場合で開きます、`InAppBrowser`.
|
||||||
|
* `_blank`: で開きます、`InAppBrowser`.
|
||||||
|
* `_system`: システムの web ブラウザーで開きます。
|
||||||
|
|
||||||
|
* **オプション**: おぷしょん、 `InAppBrowser` 。省略可能にする: `location=yes` 。*(文字列)*
|
||||||
|
|
||||||
|
`options`文字列にはする必要があります任意の空白スペースが含まれていないと、各機能の名前と値のペアをコンマで区切る必要があります。 機能名では大文字小文字を区別します。 以下の値をサポートするプラットフォーム。
|
||||||
|
|
||||||
|
* **場所**: に設定 `yes` または `no` を有効にする、 `InAppBrowser` の場所バー オンまたはオフにします。
|
||||||
|
|
||||||
|
アンドロイドのみ:
|
||||||
|
|
||||||
|
* **closebuttoncaption**: [**完了**] ボタンのキャプションとして使用する文字列に設定します。
|
||||||
|
* **非表示**: 設定 `yes` ブラウザーを作成して、ページの読み込みが表示されません。 Loadstop イベントは、読み込みが完了すると発生します。 省略するか設定 `no` (既定値) を開くし、通常負荷ブラウザーを持っています。
|
||||||
|
* **clearcache**: に設定されている `yes` 、ブラウザーのクッキー キャッシュ クリア新しいウィンドウが開く前に
|
||||||
|
* **clearsessioncache**: に設定されている `yes` はセッション cookie のキャッシュをオフに新しいウィンドウを開く前に
|
||||||
|
|
||||||
|
iOS のみ:
|
||||||
|
|
||||||
|
* **closebuttoncaption**: [**完了**] ボタンのキャプションとして使用する文字列に設定します。自分でこの値をローカライズする必要があることに注意してください。
|
||||||
|
* **disallowoverscroll**: に設定されている `yes` または `no` (既定値は `no` )。/UIWebViewBounce プロパティをオフにします。
|
||||||
|
* **非表示**: 設定 `yes` ブラウザーを作成して、ページの読み込みが表示されません。 Loadstop イベントは、読み込みが完了すると発生します。 省略するか設定 `no` (既定値) を開くし、通常読み込みブラウザーを持っています。
|
||||||
|
* **clearcache**: に設定されている `yes` 、ブラウザーのクッキー キャッシュ クリア新しいウィンドウが開く前に
|
||||||
|
* **clearsessioncache**: に設定されている `yes` はセッション cookie のキャッシュをオフにすると、新しいウィンドウが開く前に
|
||||||
|
* **ツールバー**: に設定されている `yes` または `no` InAppBrowser (デフォルトのツールバーのオンまたはオフを有効にするには`yes`)
|
||||||
|
* **enableViewportScale**: に設定されている `yes` または `no` を (デフォルトではメタタグを介してスケーリング ビューポートを防ぐために`no`).
|
||||||
|
* **mediaPlaybackRequiresUserAction**: に設定されている `yes` または `no` を HTML5 オーディオまたはビデオを自動再生 (初期設定から防ぐために`no`).
|
||||||
|
* **allowInlineMediaPlayback**: に設定されている `yes` または `no` ラインで HTML5 メディア再生には、デバイス固有再生インターフェイスではなく、ブラウザー ウィンドウ内に表示するようにします。 HTML の `video` 要素を含める必要がありますまた、 `webkit-playsinline` 属性 (デフォルトは`no`)
|
||||||
|
* **keyboardDisplayRequiresUserAction**: に設定されている `yes` または `no` をフォーム要素の JavaScript を介してフォーカスを受け取るときに、キーボードを開く `focus()` コール (デフォルトは`yes`).
|
||||||
|
* **suppressesIncrementalRendering**: に設定されている `yes` または `no` (デフォルトでは表示される前にビューのすべての新しいコンテンツを受信するまで待機するには`no`).
|
||||||
|
* **presentationstyle**: に設定されている `pagesheet` 、 `formsheet` または `fullscreen` (デフォルトでは、[プレゼンテーション スタイル][1]を設定するには`fullscreen`).
|
||||||
|
* **transitionstyle**: に設定されている `fliphorizontal` 、 `crossdissolve` または `coververtical` (デフォルトでは、[トランジションのスタイル][2]を設定するには`coververtical`).
|
||||||
|
* **toolbarposition**: に設定されている `top` または `bottom` (既定値は `bottom` )。上部またはウィンドウの下部にツールバーが発生します。
|
||||||
|
|
||||||
|
Windows のみ:
|
||||||
|
|
||||||
|
* **非表示**: 設定 `yes` ブラウザーを作成して、ページの読み込みが表示されません。 Loadstop イベントは、読み込みが完了すると発生します。 省略するか設定 `no` (既定値) を開くし、通常読み込みブラウザーを持っています。
|
||||||
|
|
||||||
|
[1]: http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalPresentationStyle
|
||||||
|
[2]: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalTransitionStyle
|
||||||
|
|
||||||
|
### サポートされているプラットフォーム
|
||||||
|
|
||||||
|
* アマゾン火 OS
|
||||||
|
* アンドロイド
|
||||||
|
* ブラックベリー 10
|
||||||
|
* Firefox の OS
|
||||||
|
* iOS
|
||||||
|
* Windows 8 および 8.1
|
||||||
|
* Windows Phone 7 と 8
|
||||||
|
|
||||||
|
### 例
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
var ref2 = window.open(encodeURI('http://ja.m.wikipedia.org/wiki/ハングル'), '_blank', 'location=yes');
|
||||||
|
|
||||||
|
|
||||||
|
### Firefox OS 癖
|
||||||
|
|
||||||
|
開かれた場合にいくつかの CSS ルールを追加する必要があるプラグインは任意のデザインを適用しないよう `target='_blank'` 。これらのような規則になります。
|
||||||
|
|
||||||
|
css
|
||||||
|
.inAppBrowserWrap {
|
||||||
|
background-color: rgba(0,0,0,0.75);
|
||||||
|
color: rgba(235,235,235,1.0);
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu {
|
||||||
|
overflow: auto;
|
||||||
|
list-style-type: none;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu li {
|
||||||
|
font-size: 25px;
|
||||||
|
height: 25px;
|
||||||
|
float: left;
|
||||||
|
margin: 0 10px;
|
||||||
|
padding: 3px 10px;
|
||||||
|
text-decoration: none;
|
||||||
|
color: #ccc;
|
||||||
|
display: block;
|
||||||
|
background: rgba(30,30,30,0.50);
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu li.disabled {
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
## InAppBrowser
|
||||||
|
|
||||||
|
呼び出しから返されるオブジェクト`window.open`.
|
||||||
|
|
||||||
|
### メソッド
|
||||||
|
|
||||||
|
* addEventListener
|
||||||
|
* removeEventListener
|
||||||
|
* close
|
||||||
|
* show
|
||||||
|
* executeScript
|
||||||
|
* insertCSS
|
||||||
|
|
||||||
|
## addEventListener
|
||||||
|
|
||||||
|
> イベントのリスナーを追加します、`InAppBrowser`.
|
||||||
|
|
||||||
|
ref.addEventListener(eventname, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: への参照を `InAppBrowser` ウィンドウ*(InAppBrowser)*
|
||||||
|
|
||||||
|
* **eventname**: *(文字列)*をリッスンするイベント
|
||||||
|
|
||||||
|
* ****: イベントが発生するとき、 `InAppBrowser` の URL の読み込みが開始します。
|
||||||
|
* **loadstop**: イベントが発生するとき、 `InAppBrowser` URL の読み込みが完了します。
|
||||||
|
* **loaderror**: イベントが発生するとき、 `InAppBrowser` URL の読み込みでエラーが発生します。
|
||||||
|
* **終了**: イベントが発生するとき、 `InAppBrowser` ウィンドウが閉じられます。
|
||||||
|
|
||||||
|
* **コールバック**: イベントが発生したときに実行される関数。関数に渡されますが、 `InAppBrowserEvent` オブジェクトをパラメーターとして。
|
||||||
|
|
||||||
|
### InAppBrowserEvent プロパティ
|
||||||
|
|
||||||
|
* **タイプ**: eventname どちらか `loadstart` 、 `loadstop` 、 `loaderror` 、または `exit` 。*(文字列)*
|
||||||
|
|
||||||
|
* **url**: URL が読み込まれました。*(文字列)*
|
||||||
|
|
||||||
|
* **コード**: の場合にのみ、エラー コード `loaderror` 。*(数)*
|
||||||
|
|
||||||
|
* **メッセージ**: の場合にのみ、エラー メッセージ `loaderror` 。*(文字列)*
|
||||||
|
|
||||||
|
### サポートされているプラットフォーム
|
||||||
|
|
||||||
|
* アマゾン火 OS
|
||||||
|
* アンドロイド
|
||||||
|
* iOS
|
||||||
|
* Windows 8 および 8.1
|
||||||
|
* Windows Phone 7 と 8
|
||||||
|
|
||||||
|
### 簡単な例
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstart', function(event) { alert(event.url); });
|
||||||
|
|
||||||
|
|
||||||
|
## removeEventListener
|
||||||
|
|
||||||
|
> イベントのリスナーを削除します、`InAppBrowser`.
|
||||||
|
|
||||||
|
ref.removeEventListener(eventname, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: への参照を `InAppBrowser` ウィンドウ。*(InAppBrowser)*
|
||||||
|
|
||||||
|
* **eventname**: イベントのリッスンを停止します。*(文字列)*
|
||||||
|
|
||||||
|
* ****: イベントが発生するとき、 `InAppBrowser` の URL の読み込みが開始します。
|
||||||
|
* **loadstop**: イベントが発生するとき、 `InAppBrowser` URL の読み込みが完了します。
|
||||||
|
* **loaderror**: イベントが発生するとき、 `InAppBrowser` URL の読み込みエラーが発生します。
|
||||||
|
* **終了**: イベントが発生するとき、 `InAppBrowser` ウィンドウが閉じられます。
|
||||||
|
|
||||||
|
* **コールバック**: イベントが発生するときに実行する関数。関数に渡されますが、 `InAppBrowserEvent` オブジェクト。
|
||||||
|
|
||||||
|
### サポートされているプラットフォーム
|
||||||
|
|
||||||
|
* アマゾン火 OS
|
||||||
|
* アンドロイド
|
||||||
|
* iOS
|
||||||
|
* Windows 8 および 8.1
|
||||||
|
* Windows Phone 7 と 8
|
||||||
|
|
||||||
|
### 簡単な例
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
var myCallback = function(event) { alert(event.url); }
|
||||||
|
ref.addEventListener('loadstart', myCallback);
|
||||||
|
ref.removeEventListener('loadstart', myCallback);
|
||||||
|
|
||||||
|
|
||||||
|
## close
|
||||||
|
|
||||||
|
> 閉じる、 `InAppBrowser` ウィンドウ。
|
||||||
|
|
||||||
|
ref.close();
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: への参照を `InAppBrowser` ウィンドウ*(InAppBrowser)*
|
||||||
|
|
||||||
|
### サポートされているプラットフォーム
|
||||||
|
|
||||||
|
* アマゾン火 OS
|
||||||
|
* アンドロイド
|
||||||
|
* Firefox の OS
|
||||||
|
* iOS
|
||||||
|
* Windows 8 および 8.1
|
||||||
|
* Windows Phone 7 と 8
|
||||||
|
|
||||||
|
### 簡単な例
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.close();
|
||||||
|
|
||||||
|
|
||||||
|
## show
|
||||||
|
|
||||||
|
> 隠された開かれた InAppBrowser ウィンドウが表示されます。この関数を呼び出すは影響しません、InAppBrowser が既に表示されている場合。
|
||||||
|
|
||||||
|
ref.show();
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: InAppBrowser ウィンドウ (への参照`InAppBrowser`)
|
||||||
|
|
||||||
|
### サポートされているプラットフォーム
|
||||||
|
|
||||||
|
* アマゾン火 OS
|
||||||
|
* アンドロイド
|
||||||
|
* iOS
|
||||||
|
* Windows 8 および 8.1
|
||||||
|
|
||||||
|
### 簡単な例
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'hidden=yes');
|
||||||
|
// some time later...
|
||||||
|
ref.show();
|
||||||
|
|
||||||
|
|
||||||
|
## executeScript
|
||||||
|
|
||||||
|
> JavaScript コードに挿入します、 `InAppBrowser` ウィンドウ
|
||||||
|
|
||||||
|
ref.executeScript(details, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: への参照を `InAppBrowser` ウィンドウ。*(InAppBrowser)*
|
||||||
|
|
||||||
|
* **injectDetails**: 詳細を実行するスクリプトのいずれかを指定する、 `file` または `code` キー。*(オブジェクト)*
|
||||||
|
|
||||||
|
* **ファイル**: スクリプトの URL を注入します。
|
||||||
|
* **コード**: スクリプトのテキストを挿入します。
|
||||||
|
|
||||||
|
* **コールバック**: JavaScript コードを注入した後に実行される関数。
|
||||||
|
|
||||||
|
* 挿入されたスクリプトが型の場合 `code` 、スクリプトの戻り値は、1 つのパラメーターでコールバックを実行するのに包まれて、 `Array` 。 マルチライン スクリプトについては、最後のステートメントでは、または評価した最後の式の戻り値です。
|
||||||
|
|
||||||
|
### サポートされているプラットフォーム
|
||||||
|
|
||||||
|
* アマゾン火 OS
|
||||||
|
* アンドロイド
|
||||||
|
* iOS
|
||||||
|
* Windows 8 および 8.1
|
||||||
|
|
||||||
|
### 簡単な例
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.executeScript({file: "myscript.js"});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
## insertCSS
|
||||||
|
|
||||||
|
> CSS に注入する、 `InAppBrowser` ウィンドウ。
|
||||||
|
|
||||||
|
ref.insertCSS(details, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: への参照を `InAppBrowser` ウィンドウ*(InAppBrowser)*
|
||||||
|
|
||||||
|
* **injectDetails**: 詳細を実行するスクリプトのいずれかを指定する、 `file` または `code` キー。*(オブジェクト)*
|
||||||
|
|
||||||
|
* **ファイル**: 注入するスタイル シートの URL。
|
||||||
|
* **コード**: 注入するスタイル シートのテキスト。
|
||||||
|
|
||||||
|
* **コールバック**: CSS の注入後に実行される関数。
|
||||||
|
|
||||||
|
### サポートされているプラットフォーム
|
||||||
|
|
||||||
|
* アマゾン火 OS
|
||||||
|
* アンドロイド
|
||||||
|
* iOS
|
||||||
|
|
||||||
|
### 簡単な例
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.insertCSS({file: "mystyles.css"});
|
||||||
|
});
|
||||||
+330
@@ -0,0 +1,330 @@
|
|||||||
|
<!---
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
# org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
|
이 플러그인은를 호출할 때 표시 하는 웹 브라우저 보기를 제공 합니다.`window.open()`.
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
|
||||||
|
|
||||||
|
**참고**: 동작 하는 창에 InAppBrowser 표준 웹 브라우저를 좋아하고 코르도바 Api에 액세스할 수 없습니다.
|
||||||
|
|
||||||
|
## 설치
|
||||||
|
|
||||||
|
cordova plugin add org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
|
|
||||||
|
## window.open
|
||||||
|
|
||||||
|
새 URL을 엽니다 `InAppBrowser` 인스턴스, 현재 브라우저 인스턴스 또는 시스템 브라우저.
|
||||||
|
|
||||||
|
var ref = window.open(url, target, options);
|
||||||
|
|
||||||
|
|
||||||
|
* **심판**:에 대 한 참조는 `InAppBrowser` 창. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **url**: *(문자열)를*로드 하는 URL. 전화 `encodeURI()` 이 경우에는 URL 유니코드 문자를 포함 합니다.
|
||||||
|
|
||||||
|
* **대상**: 대상 URL, 기본적으로 선택적 매개 변수를 로드 하는 `_self` . *(문자열)*
|
||||||
|
|
||||||
|
* `_self`: URL 화이트 리스트에 있으면 코르도바 WebView에서 열리고, 그렇지 않으면 열에`InAppBrowser`.
|
||||||
|
* `_blank`: 준공에`InAppBrowser`.
|
||||||
|
* `_system`: 시스템의 웹 브라우저에서 엽니다.
|
||||||
|
|
||||||
|
* **옵션**: 옵션은 `InAppBrowser` . 선택적, 디폴트에: `location=yes` . *(문자열)*
|
||||||
|
|
||||||
|
`options`문자열 텅 빈 어떤 스페이스 포함 해서는 안 그리고 쉼표 각 기능의 이름/값 쌍을 구분 합니다. 기능 이름은 대/소문자입니다. 모든 플랫폼 지원 아래 값:
|
||||||
|
|
||||||
|
* **위치**: 설정 `yes` 또는 `no` 설정 하는 `InAppBrowser` 의 위치 표시줄 켜거나 끕니다.
|
||||||
|
|
||||||
|
안 드 로이드만:
|
||||||
|
|
||||||
|
* **closebuttoncaption**: **수행** 하는 단추의 캡션으로 사용할 문자열을 설정 합니다.
|
||||||
|
* **숨겨진**: 설정 `yes` 브라우저를 만들 페이지를 로드 하면, 하지만 그것을 보여주지. Loadstop 이벤트는 로드가 완료 되 면 발생 합니다. 생략 하거나 설정 `no` (기본값) 브라우저 열고 정상적으로 로드 해야 합니다.
|
||||||
|
* **clearcache**: 설정 `yes` 브라우저를 쿠키 캐시 삭제 하기 전에 새 창이 열립니다
|
||||||
|
* **clearsessioncache**: 설정 `yes` 세션 쿠키 캐시를 삭제 하기 전에 새 창이 열립니다
|
||||||
|
|
||||||
|
iOS만:
|
||||||
|
|
||||||
|
* **closebuttoncaption**: **수행** 하는 단추의 캡션으로 사용할 문자열을 설정 합니다. 참고 직접이 값을 지역화 해야 합니다.
|
||||||
|
* **disallowoverscroll**: 설정 `yes` 또는 `no` (기본값은 `no` ). 회전 온/오프 UIWebViewBounce 속성입니다.
|
||||||
|
* **숨겨진**: 설정 `yes` 브라우저를 만들 페이지를 로드 하면, 하지만 그것을 보여주지. Loadstop 이벤트는 로드가 완료 되 면 발생 합니다. 생략 하거나 설정 `no` (기본값) 브라우저 열고 정상적으로 로드 해야 합니다.
|
||||||
|
* **clearcache**: 설정 `yes` 브라우저를 쿠키 캐시 삭제 하기 전에 새 창이 열립니다
|
||||||
|
* **clearsessioncache**: 설정 `yes` 세션 쿠키 캐시를 삭제 하기 전에 새 창이 열립니다
|
||||||
|
* **도구 모음**: 설정 `yes` 또는 `no` InAppBrowser (기본값:에 대 한 도구 모음 온 / 오프를 돌기 위하여`yes`)
|
||||||
|
* **enableViewportScale**: 설정 `yes` 또는 `no` 뷰포트 메타 태그 (기본값:를 통해 확장을 방지 하기 위해`no`).
|
||||||
|
* **mediaPlaybackRequiresUserAction**: 설정 `yes` 또는 `no` HTML5 오디오 또는 비디오 자동 재생 (기본값에서에서 방지 하기 위해`no`).
|
||||||
|
* **allowInlineMediaPlayback**: 설정 `yes` 또는 `no` 인라인 HTML5 미디어 재생, 장치 전용 재생 인터페이스 보다는 브라우저 창 내에서 표시할 수 있도록 합니다. HTML의 `video` 요소가 포함 되어야 합니다는 `webkit-playsinline` 특성 (기본값:`no`)
|
||||||
|
* **keyboardDisplayRequiresUserAction**: 설정 `yes` 또는 `no` 양식 요소는 자바 스크립트를 통해 포커스를 받을 때 키보드를 열고 `focus()` 전화 (기본값:`yes`).
|
||||||
|
* **suppressesIncrementalRendering**: 설정 `yes` 또는 `no` (기본값을 렌더링 하기 전에 모든 새로운 보기 콘텐츠를 받을 때까지 기다려야`no`).
|
||||||
|
* **presentationstyle**: 설정 `pagesheet` , `formsheet` 또는 `fullscreen` [프레 젠 테이 션 스타일][1] (기본값을 설정 하려면`fullscreen`).
|
||||||
|
* **transitionstyle**: 설정 `fliphorizontal` , `crossdissolve` 또는 `coververtical` [전환 스타일][2] (기본값을 설정 하려면`coververtical`).
|
||||||
|
* **toolbarposition**: 설정 `top` 또는 `bottom` (기본값은 `bottom` ). 위쪽 또는 아래쪽 창에 도구 모음을 발생 합니다.
|
||||||
|
|
||||||
|
Windows에만 해당:
|
||||||
|
|
||||||
|
* **숨겨진**: 설정 `yes` 브라우저를 만들 페이지를 로드 하면, 하지만 그것을 보여주지. Loadstop 이벤트는 로드가 완료 되 면 발생 합니다. 생략 하거나 설정 `no` (기본값) 브라우저 열고 정상적으로 로드 해야 합니다.
|
||||||
|
|
||||||
|
[1]: http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalPresentationStyle
|
||||||
|
[2]: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalTransitionStyle
|
||||||
|
|
||||||
|
### 지원 되는 플랫폼
|
||||||
|
|
||||||
|
* 아마존 화재 운영 체제
|
||||||
|
* 안 드 로이드
|
||||||
|
* 블랙베리 10
|
||||||
|
* Firefox 운영 체제
|
||||||
|
* iOS
|
||||||
|
* 윈도우 8과 8.1
|
||||||
|
* Windows Phone 7과 8
|
||||||
|
|
||||||
|
### 예를 들어
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
var ref2 = window.open(encodeURI('http://ja.m.wikipedia.org/wiki/ハングル'), '_blank', 'location=yes');
|
||||||
|
|
||||||
|
|
||||||
|
### 파이어 폭스 OS 단점
|
||||||
|
|
||||||
|
플러그인 어떤 디자인을 적용 하지 않는 경우 열 일부 CSS의 규칙을 추가할 필요가 있다 `target='_blank'` . 이 같이 규칙
|
||||||
|
|
||||||
|
css
|
||||||
|
.inAppBrowserWrap {
|
||||||
|
background-color: rgba(0,0,0,0.75);
|
||||||
|
color: rgba(235,235,235,1.0);
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu {
|
||||||
|
overflow: auto;
|
||||||
|
list-style-type: none;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu li {
|
||||||
|
font-size: 25px;
|
||||||
|
height: 25px;
|
||||||
|
float: left;
|
||||||
|
margin: 0 10px;
|
||||||
|
padding: 3px 10px;
|
||||||
|
text-decoration: none;
|
||||||
|
color: #ccc;
|
||||||
|
display: block;
|
||||||
|
background: rgba(30,30,30,0.50);
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu li.disabled {
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
## InAppBrowser
|
||||||
|
|
||||||
|
호출에서 반환 하는 개체`window.open`.
|
||||||
|
|
||||||
|
### 메서드
|
||||||
|
|
||||||
|
* addEventListener
|
||||||
|
* removeEventListener
|
||||||
|
* close
|
||||||
|
* show
|
||||||
|
* executeScript
|
||||||
|
* insertCSS
|
||||||
|
|
||||||
|
## addEventListener
|
||||||
|
|
||||||
|
> 이벤트에 대 한 수신기를 추가 합니다`InAppBrowser`.
|
||||||
|
|
||||||
|
ref.addEventListener(eventname, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **심판**:에 대 한 참조는 `InAppBrowser` 창 *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **eventname**: *(문자열)를* 수신 하도록 이벤트
|
||||||
|
|
||||||
|
* **loadstart**: 이벤트 발생 때는 `InAppBrowser` URL 로드를 시작 합니다.
|
||||||
|
* **loadstop**: 이벤트가 발생 시기는 `InAppBrowser` URL 로드 완료.
|
||||||
|
* **loaderror**: 이벤트 발생 때는 `InAppBrowser` URL을 로드할 때 오류가 발생 합니다.
|
||||||
|
* **종료**: 이벤트가 발생 시기는 `InAppBrowser` 창이 닫힙니다.
|
||||||
|
|
||||||
|
* **콜백**: 이벤트가 발생 될 때 실행 되는 함수. 함수는 전달 된 `InAppBrowserEvent` 개체를 매개 변수로 합니다.
|
||||||
|
|
||||||
|
### InAppBrowserEvent 속성
|
||||||
|
|
||||||
|
* **유형**: eventname, 중 `loadstart` , `loadstop` , `loaderror` , 또는 `exit` . *(문자열)*
|
||||||
|
|
||||||
|
* **url**: URL 로드 된. *(문자열)*
|
||||||
|
|
||||||
|
* **코드**: 오류 코드의 경우에만 `loaderror` . *(수)*
|
||||||
|
|
||||||
|
* **메시지**: 오류 메시지의 경우에만 `loaderror` . *(문자열)*
|
||||||
|
|
||||||
|
### 지원 되는 플랫폼
|
||||||
|
|
||||||
|
* 아마존 화재 운영 체제
|
||||||
|
* 안 드 로이드
|
||||||
|
* iOS
|
||||||
|
* 윈도우 8과 8.1
|
||||||
|
* Windows Phone 7과 8
|
||||||
|
|
||||||
|
### 빠른 예제
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstart', function(event) { alert(event.url); });
|
||||||
|
|
||||||
|
|
||||||
|
## removeEventListener
|
||||||
|
|
||||||
|
> 이벤트에 대 한 수신기를 제거 합니다`InAppBrowser`.
|
||||||
|
|
||||||
|
ref.removeEventListener(eventname, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **심판**:에 대 한 참조는 `InAppBrowser` 창. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **eventname**: 이벤트 수신 대기를 중지 합니다. *(문자열)*
|
||||||
|
|
||||||
|
* **loadstart**: 이벤트 발생 때는 `InAppBrowser` URL 로드를 시작 합니다.
|
||||||
|
* **loadstop**: 이벤트가 발생 시기는 `InAppBrowser` URL 로드 완료.
|
||||||
|
* **loaderror**: 이벤트 발생 때는 `InAppBrowser` URL 로드 오류가 발생 합니다.
|
||||||
|
* **종료**: 이벤트가 발생 시기는 `InAppBrowser` 창이 닫힙니다.
|
||||||
|
|
||||||
|
* **콜백**: 이벤트가 발생 하면 실행할 함수. 함수는 전달 된 `InAppBrowserEvent` 개체.
|
||||||
|
|
||||||
|
### 지원 되는 플랫폼
|
||||||
|
|
||||||
|
* 아마존 화재 운영 체제
|
||||||
|
* 안 드 로이드
|
||||||
|
* iOS
|
||||||
|
* 윈도우 8과 8.1
|
||||||
|
* Windows Phone 7과 8
|
||||||
|
|
||||||
|
### 빠른 예제
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
var myCallback = function(event) { alert(event.url); }
|
||||||
|
ref.addEventListener('loadstart', myCallback);
|
||||||
|
ref.removeEventListener('loadstart', myCallback);
|
||||||
|
|
||||||
|
|
||||||
|
## close
|
||||||
|
|
||||||
|
> 종료는 `InAppBrowser` 창.
|
||||||
|
|
||||||
|
ref.close();
|
||||||
|
|
||||||
|
|
||||||
|
* **심판**:에 대 한 참조는 `InAppBrowser` 창 *(InAppBrowser)*
|
||||||
|
|
||||||
|
### 지원 되는 플랫폼
|
||||||
|
|
||||||
|
* 아마존 화재 운영 체제
|
||||||
|
* 안 드 로이드
|
||||||
|
* Firefox 운영 체제
|
||||||
|
* iOS
|
||||||
|
* 윈도우 8과 8.1
|
||||||
|
* Windows Phone 7과 8
|
||||||
|
|
||||||
|
### 빠른 예제
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.close();
|
||||||
|
|
||||||
|
|
||||||
|
## show
|
||||||
|
|
||||||
|
> 숨겨진 열은 한 InAppBrowser 창을 표시 합니다. 전화는 InAppBrowser가 이미 보이는 경우는 효과가 없습니다.
|
||||||
|
|
||||||
|
ref.show();
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: InAppBrowser 창 (참조`InAppBrowser`)
|
||||||
|
|
||||||
|
### 지원 되는 플랫폼
|
||||||
|
|
||||||
|
* 아마존 화재 운영 체제
|
||||||
|
* 안 드 로이드
|
||||||
|
* iOS
|
||||||
|
* 윈도우 8과 8.1
|
||||||
|
|
||||||
|
### 빠른 예제
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'hidden=yes');
|
||||||
|
// some time later...
|
||||||
|
ref.show();
|
||||||
|
|
||||||
|
|
||||||
|
## executeScript
|
||||||
|
|
||||||
|
> 에 자바 스크립트 코드를 삽입는 `InAppBrowser` 창
|
||||||
|
|
||||||
|
ref.executeScript(details, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **심판**:에 대 한 참조는 `InAppBrowser` 창. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **injectDetails**: 스크립트 실행의 세부 사항 중 하나를 지정 하는 `file` 또는 `code` 키. *(개체)*
|
||||||
|
|
||||||
|
* **파일**: 삽입 하는 스크립트의 URL.
|
||||||
|
* **코드**: 스크립트 텍스트를 삽입 합니다.
|
||||||
|
|
||||||
|
* **콜백**: 자바 스크립트 코드를 주입 후 실행 기능.
|
||||||
|
|
||||||
|
* 삽입 된 스크립트 유형의 경우 `code` , 스크립트의 반환 값은 단일 매개 변수는 콜백 실행에 싸여 있는 `Array` . 여러 줄 스크립트에 대 한 마지막 문 또는 평가 마지막 식의 반환 값입니다.
|
||||||
|
|
||||||
|
### 지원 되는 플랫폼
|
||||||
|
|
||||||
|
* 아마존 화재 운영 체제
|
||||||
|
* 안 드 로이드
|
||||||
|
* iOS
|
||||||
|
* 윈도우 8과 8.1
|
||||||
|
|
||||||
|
### 빠른 예제
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.executeScript({file: "myscript.js"});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
## insertCSS
|
||||||
|
|
||||||
|
> 주사로 CSS는 `InAppBrowser` 창.
|
||||||
|
|
||||||
|
ref.insertCSS(details, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **심판**:에 대 한 참조는 `InAppBrowser` 창 *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **injectDetails**: 스크립트 실행의 세부 사항 중 하나를 지정 하는 `file` 또는 `code` 키. *(개체)*
|
||||||
|
|
||||||
|
* **파일**: 삽입 하는 스타일 시트의 URL.
|
||||||
|
* **코드**: 삽입 하는 스타일 시트의 텍스트.
|
||||||
|
|
||||||
|
* **콜백**: CSS 주입 후 실행 기능.
|
||||||
|
|
||||||
|
### 지원 되는 플랫폼
|
||||||
|
|
||||||
|
* 아마존 화재 운영 체제
|
||||||
|
* 안 드 로이드
|
||||||
|
* iOS
|
||||||
|
|
||||||
|
### 빠른 예제
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.insertCSS({file: "mystyles.css"});
|
||||||
|
});
|
||||||
+330
@@ -0,0 +1,330 @@
|
|||||||
|
<!---
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
# org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
|
Plugin daje widok przeglądarki sieci web, które są wyświetlane podczas wywoływania`window.open()`.
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
|
||||||
|
|
||||||
|
**Uwaga**: The InAppBrowser okno zachowuje się jak standardowe przeglądarki, a nie ma dostępu do API Cordova.
|
||||||
|
|
||||||
|
## Instalacja
|
||||||
|
|
||||||
|
cordova plugin add org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
|
|
||||||
|
## window.open
|
||||||
|
|
||||||
|
Otwiera URL w nowym `InAppBrowser` wystąpienie, bieżące wystąpienie przeglądarki lub przeglądarki systemu.
|
||||||
|
|
||||||
|
var ref = window.open(url, target, options);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: odniesienie do `InAppBrowser` okna. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **adres**: adres URL do ładowania *(ciąg)*. Wywołanie `encodeURI()` na to, czy adres URL zawiera znaki Unicode.
|
||||||
|
|
||||||
|
* **miejsce docelowe**: miejsce docelowe, w którym wobec ciężar ten URL parametr opcjonalny, który domyślnie `_self` . *(String)*
|
||||||
|
|
||||||
|
* `_self`: Otwiera w Cordova WebView, jeśli adres URL jest na białej liście, inaczej ono otwiera w`InAppBrowser`.
|
||||||
|
* `_blank`: Otwiera w`InAppBrowser`.
|
||||||
|
* `_system`: Otwiera w przeglądarce internetowej systemu.
|
||||||
|
|
||||||
|
* **Opcje**: opcje dla `InAppBrowser` . Opcjonalnie, nie stawiła się: `location=yes` . *(String)*
|
||||||
|
|
||||||
|
`options`Ciąg nie może zawierać żadnych spacji, i pary nazwa/wartość każdej funkcji muszą być oddzielone przecinkami. Nazwy funkcji jest rozróżniana. Wszystkich platform obsługuje wartości poniżej:
|
||||||
|
|
||||||
|
* **Lokalizacja**: zestaw `yes` lub `no` Aby włączyć `InAppBrowser` na pasek lub wyłączyć.
|
||||||
|
|
||||||
|
Android:
|
||||||
|
|
||||||
|
* **closebuttoncaption**: aby użyć jak **zrobić** przycisk Podpis ustawiona na ciąg.
|
||||||
|
* **ukryte**: zestaw `yes` do stworzenia przeglądarki i ładowania strony, ale nie pokazuje go. Loadstop zdarzenie fires po zakończeniu ładowania. Pominąć lub zestaw `no` (domyślnie) do przeglądarki otworzyć i załadować normalnie.
|
||||||
|
* **ClearCache**: zestaw `yes` do przeglądarki w pamięci podręcznej plików cookie wyczyszczone zanim otworzy się nowe okno
|
||||||
|
* **clearsessioncache**: zestaw `yes` mieć w pamięci podręcznej plików cookie sesji wyczyszczone zanim otworzy się nowe okno
|
||||||
|
|
||||||
|
tylko iOS:
|
||||||
|
|
||||||
|
* **closebuttoncaption**: aby użyć jak **zrobić** przycisk Podpis ustawiona na ciąg. Należy pamiętać, że trzeba zlokalizować tę wartość siebie.
|
||||||
|
* **disallowoverscroll**: zestaw `yes` lub `no` (domyślnie `no` ). Włącza/wyłącza właściwość UIWebViewBounce.
|
||||||
|
* **ukryte**: zestaw `yes` do stworzenia przeglądarki i ładowania strony, ale nie pokazuje go. Loadstop zdarzenie fires po zakończeniu ładowania. Pominąć lub zestaw `no` (domyślnie) do przeglądarki otworzyć i załadować normalnie.
|
||||||
|
* **ClearCache**: zestaw `yes` do przeglądarki w pamięci podręcznej plików cookie wyczyszczone zanim otworzy się nowe okno
|
||||||
|
* **clearsessioncache**: zestaw `yes` mieć w pamięci podręcznej plików cookie sesji wyczyszczone zanim otworzy się nowe okno
|
||||||
|
* **pasek narzędzi**: zestaw `yes` lub `no` Aby włączyć pasek narzędzi lub wyłączyć dla InAppBrowser (domyślnie`yes`)
|
||||||
|
* **enableViewportScale**: zestaw `yes` lub `no` Aby zapobiec rzutni skalowanie za pomocą tagu meta (domyślnie`no`).
|
||||||
|
* **mediaPlaybackRequiresUserAction**: zestaw `yes` lub `no` Aby zapobiec HTML5 audio lub wideo z Autoodtwarzanie (domyślnie`no`).
|
||||||
|
* **allowInlineMediaPlayback**: zestaw `yes` lub `no` Aby w linii HTML5 odtwarzanie, wyświetlanie w oknie przeglądarki, a nie interfejs odtwarzanie specyficzne dla urządzenia. HTML `video` również musi zawierać element `webkit-playsinline` atrybut (domyślnie`no`)
|
||||||
|
* **keyboardDisplayRequiresUserAction**: zestaw `yes` lub `no` Aby otworzyć klawiaturę ekranową, gdy elementy formularza ostrości za pomocą JavaScript `focus()` połączenia (domyślnie`yes`).
|
||||||
|
* **suppressesIncrementalRendering**: zestaw `yes` lub `no` czekać, aż wszystkie nowe widok zawartości jest otrzymane przed renderowany (domyślnie`no`).
|
||||||
|
* **presentationstyle**: zestaw `pagesheet` , `formsheet` lub `fullscreen` Aby ustawić [styl prezentacji][1] (domyślnie`fullscreen`).
|
||||||
|
* **transitionstyle**: zestaw `fliphorizontal` , `crossdissolve` lub `coververtical` Aby ustawić [styl przejścia][2] (domyślnie`coververtical`).
|
||||||
|
* **toolbarposition**: zestaw `top` lub `bottom` (domyślnie `bottom` ). Powoduje, że pasek ma być na górze lub na dole okna.
|
||||||
|
|
||||||
|
Windows tylko:
|
||||||
|
|
||||||
|
* **ukryte**: zestaw `yes` do stworzenia przeglądarki i ładowania strony, ale nie pokazuje go. Loadstop zdarzenie fires po zakończeniu ładowania. Pominąć lub zestaw `no` (domyślnie) do przeglądarki otworzyć i załadować normalnie.
|
||||||
|
|
||||||
|
[1]: http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalPresentationStyle
|
||||||
|
[2]: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalTransitionStyle
|
||||||
|
|
||||||
|
### Obsługiwane platformy
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* BlackBerry 10
|
||||||
|
* Firefox OS
|
||||||
|
* iOS
|
||||||
|
* Windows 8 i 8.1
|
||||||
|
* Windows Phone 7 i 8
|
||||||
|
|
||||||
|
### Przykład
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
var ref2 = window.open(encodeURI('http://ja.m.wikipedia.org/wiki/ハングル'), '_blank', 'location=yes');
|
||||||
|
|
||||||
|
|
||||||
|
### Firefox OS dziwactwa
|
||||||
|
|
||||||
|
Jak plugin nie wymuszać każdy projekt to trzeba dodać pewne reguły CSS jeśli otwarty z `target='_blank'` . Zasady może wyglądać jak te
|
||||||
|
|
||||||
|
css
|
||||||
|
.inAppBrowserWrap {
|
||||||
|
background-color: rgba(0,0,0,0.75);
|
||||||
|
color: rgba(235,235,235,1.0);
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu {
|
||||||
|
overflow: auto;
|
||||||
|
list-style-type: none;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu li {
|
||||||
|
font-size: 25px;
|
||||||
|
height: 25px;
|
||||||
|
float: left;
|
||||||
|
margin: 0 10px;
|
||||||
|
padding: 3px 10px;
|
||||||
|
text-decoration: none;
|
||||||
|
color: #ccc;
|
||||||
|
display: block;
|
||||||
|
background: rgba(30,30,30,0.50);
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu li.disabled {
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
## InAppBrowser
|
||||||
|
|
||||||
|
Obiekt zwrócony z wywołania`window.open`.
|
||||||
|
|
||||||
|
### Metody
|
||||||
|
|
||||||
|
* metody addEventListener
|
||||||
|
* removeEventListener
|
||||||
|
* Zamknij
|
||||||
|
* Pokaż
|
||||||
|
* executeScript
|
||||||
|
* insertCSS
|
||||||
|
|
||||||
|
## metody addEventListener
|
||||||
|
|
||||||
|
> Dodaje detektor zdarzenia z`InAppBrowser`.
|
||||||
|
|
||||||
|
ref.addEventListener(eventname, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: odniesienie do `InAppBrowser` okna *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **EventName**: zdarzenie słuchać *(String)*
|
||||||
|
|
||||||
|
* **loadstart**: zdarzenie gdy odpalam `InAppBrowser` zaczyna się ładować adresu URL.
|
||||||
|
* **loadstop**: zdarzenie gdy odpalam `InAppBrowser` zakończeniu ładowania adresu URL.
|
||||||
|
* **LoadError**: zdarzenie odpala gdy `InAppBrowser` napotka błąd podczas ładowania adresu URL.
|
||||||
|
* **wyjście**: zdarzenie gdy odpalam `InAppBrowser` okno jest zamknięte.
|
||||||
|
|
||||||
|
* **wywołania zwrotnego**: funkcja, która wykonuje, gdy zdarzenie. Funkcja jest przekazywany `InAppBrowserEvent` obiektu jako parametr.
|
||||||
|
|
||||||
|
### Właściwości InAppBrowserEvent
|
||||||
|
|
||||||
|
* **Typ**: eventname, albo `loadstart` , `loadstop` , `loaderror` , lub `exit` . *(String)*
|
||||||
|
|
||||||
|
* **adres**: adres URL, który został załadowany. *(String)*
|
||||||
|
|
||||||
|
* **Kod**: kod błędu, tylko w przypadku `loaderror` . *(Liczba)*
|
||||||
|
|
||||||
|
* **wiadomość**: komunikat o błędzie, tylko w przypadku `loaderror` . *(String)*
|
||||||
|
|
||||||
|
### Obsługiwane platformy
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 i 8.1
|
||||||
|
* Windows Phone 7 i 8
|
||||||
|
|
||||||
|
### Szybki przykład
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstart', function(event) { alert(event.url); });
|
||||||
|
|
||||||
|
|
||||||
|
## removeEventListener
|
||||||
|
|
||||||
|
> Usuwa detektor zdarzenia z`InAppBrowser`.
|
||||||
|
|
||||||
|
ref.removeEventListener(eventname, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: odniesienie do `InAppBrowser` okna. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **EventName**: zdarzenie przestanie słuchać. *(String)*
|
||||||
|
|
||||||
|
* **loadstart**: zdarzenie gdy odpalam `InAppBrowser` zaczyna się ładować adresu URL.
|
||||||
|
* **loadstop**: zdarzenie gdy odpalam `InAppBrowser` zakończeniu ładowania adresu URL.
|
||||||
|
* **LoadError**: zdarzenie odpala gdy `InAppBrowser` napotka błąd ładowania adresu URL.
|
||||||
|
* **wyjście**: zdarzenie gdy odpalam `InAppBrowser` okno jest zamknięte.
|
||||||
|
|
||||||
|
* **wywołania zwrotnego**: funkcja do wykonania, gdy zdarzenie. Funkcja jest przekazywany `InAppBrowserEvent` obiektu.
|
||||||
|
|
||||||
|
### Obsługiwane platformy
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 i 8.1
|
||||||
|
* Windows Phone 7 i 8
|
||||||
|
|
||||||
|
### Szybki przykład
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
var myCallback = function(event) { alert(event.url); }
|
||||||
|
ref.addEventListener('loadstart', myCallback);
|
||||||
|
ref.removeEventListener('loadstart', myCallback);
|
||||||
|
|
||||||
|
|
||||||
|
## Zamknij
|
||||||
|
|
||||||
|
> Zamyka `InAppBrowser` okna.
|
||||||
|
|
||||||
|
ref.Close();
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: odniesienie do `InAppBrowser` okna *(InAppBrowser)*
|
||||||
|
|
||||||
|
### Obsługiwane platformy
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* Firefox OS
|
||||||
|
* iOS
|
||||||
|
* Windows 8 i 8.1
|
||||||
|
* Windows Phone 7 i 8
|
||||||
|
|
||||||
|
### Szybki przykład
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.close();
|
||||||
|
|
||||||
|
|
||||||
|
## Pokaż
|
||||||
|
|
||||||
|
> Wyświetla InAppBrowser okno, który został otwarty ukryte. Zawód ten jest ignorowany, jeśli InAppBrowser już był widoczny.
|
||||||
|
|
||||||
|
ref.show();
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: odwołanie do InAppBrowser (okno`InAppBrowser`)
|
||||||
|
|
||||||
|
### Obsługiwane platformy
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 i 8.1
|
||||||
|
|
||||||
|
### Szybki przykład
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'hidden=yes');
|
||||||
|
// some time later...
|
||||||
|
ref.show();
|
||||||
|
|
||||||
|
|
||||||
|
## executeScript
|
||||||
|
|
||||||
|
> Wstrzykuje kod JavaScript w `InAppBrowser` okna
|
||||||
|
|
||||||
|
ref.executeScript(details, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: odniesienie do `InAppBrowser` okna. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **injectDetails**: Szczegóły dotyczące skryptu, określając albo `file` lub `code` klucz. *(Obiekt)*
|
||||||
|
|
||||||
|
* **plik**: adres URL skryptu, aby wstrzyknąć.
|
||||||
|
* **Kod**: tekst skryptu, aby wstrzyknąć.
|
||||||
|
|
||||||
|
* **wywołania zwrotnego**: funkcja, która wykonuje po kod JavaScript jest wstrzykiwany.
|
||||||
|
|
||||||
|
* Jeśli taki skrypt jest typu `code` , wykonuje wywołanie zwrotne z pojedynczym parametrem, który jest wartość zwracana przez skrypt, owinięte w `Array` . Dla wielu linii skrypty to wartość zwracana ostatniej instrukcja, lub ostatni wyrażenie oceniane.
|
||||||
|
|
||||||
|
### Obsługiwane platformy
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 i 8.1
|
||||||
|
|
||||||
|
### Szybki przykład
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.executeScript({file: "myscript.js"});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
## insertCSS
|
||||||
|
|
||||||
|
> Wstrzykuje CSS w `InAppBrowser` okna.
|
||||||
|
|
||||||
|
ref.insertCSS(details, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: odniesienie do `InAppBrowser` okna *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **injectDetails**: Szczegóły dotyczące skryptu, określając albo `file` lub `code` klucz. *(Obiekt)*
|
||||||
|
|
||||||
|
* **plik**: URL arkusza stylów do wsuwania.
|
||||||
|
* **Kod**: tekst z arkusza stylów do wstrzykiwania.
|
||||||
|
|
||||||
|
* **wywołania zwrotnego**: funkcja, która wykonuje po CSS jest wstrzykiwany.
|
||||||
|
|
||||||
|
### Obsługiwane platformy
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
|
||||||
|
### Szybki przykład
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.insertCSS({file: "mystyles.css"});
|
||||||
|
});
|
||||||
+330
@@ -0,0 +1,330 @@
|
|||||||
|
<!---
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
# org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
|
Этот плагин обеспечивает представление веб-браузера, что показывает при вызове`window.open()`.
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
|
||||||
|
|
||||||
|
**Примечание**: InAppBrowser окно ведет себя как стандартный веб-браузер и не может доступ API Cordova.
|
||||||
|
|
||||||
|
## Установка
|
||||||
|
|
||||||
|
cordova plugin add org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
|
|
||||||
|
## window.open
|
||||||
|
|
||||||
|
Открывает URL-адрес в новом `InAppBrowser` например, текущий экземпляр браузера или браузера системы.
|
||||||
|
|
||||||
|
var ref = window.open(url, target, options);
|
||||||
|
|
||||||
|
|
||||||
|
* **ссылка**: ссылка для `InAppBrowser` окно. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **URL**: URL-адрес для загрузки *(String)*. Вызвать `encodeURI()` на это, если URL-адрес содержит символы Unicode.
|
||||||
|
|
||||||
|
* **Цель**: цель для загрузки URL-адреса, необязательный параметр, по умолчанию `_self` . *(Строка)*
|
||||||
|
|
||||||
|
* `_self`: Открывается в Cordova WebView, если URL-адрес в белый список, в противном случае он открывается в`InAppBrowser`.
|
||||||
|
* `_blank`: Открывает в`InAppBrowser`.
|
||||||
|
* `_system`: Открывается в веб-браузера системы.
|
||||||
|
|
||||||
|
* **опции**: параметры для `InAppBrowser` . Необязательный параметр, виновная в: `location=yes` . *(Строка)*
|
||||||
|
|
||||||
|
`options`Строка не должна содержать каких-либо пустое пространство, и каждая функция пар имя/значение должны быть разделены запятой. Функция имена нечувствительны к регистру. Все платформы поддерживают исходное значение:
|
||||||
|
|
||||||
|
* **Расположение**: равным `yes` или `no` превратить `InAppBrowser` в адресную строку или выключить.
|
||||||
|
|
||||||
|
Только андроид:
|
||||||
|
|
||||||
|
* **closebuttoncaption**: задайте строку для использования в качестве заголовка кнопки **сделали** .
|
||||||
|
* **скрытые**: значение `yes` для создания браузера и загрузки страницы, но не показать его. Событие loadstop возникает, когда загрузка завершена. Опустить или набор `no` (по умолчанию), чтобы браузер открыть и загрузить нормально.
|
||||||
|
* **ClearCache**: набор `yes` иметь браузера куки кэш очищен перед открытием нового окна
|
||||||
|
* **clearsessioncache**: значение `yes` иметь кэш cookie сеанса очищается перед открытием нового окна
|
||||||
|
|
||||||
|
только iOS:
|
||||||
|
|
||||||
|
* **closebuttoncaption**: задайте строку для использования в качестве заголовка кнопки **сделали** . Обратите внимание, что вам нужно самостоятельно локализовать это значение.
|
||||||
|
* **disallowoverscroll**: значение `yes` или `no` (по умолчанию `no` ). Включает/отключает свойство UIWebViewBounce.
|
||||||
|
* **скрытые**: значение `yes` для создания браузера и загрузки страницы, но не показать его. Событие loadstop возникает, когда загрузка завершена. Опустить или набор `no` (по умолчанию), чтобы браузер открыть и загрузить нормально.
|
||||||
|
* **ClearCache**: набор `yes` иметь браузера куки кэш очищен перед открытием нового окна
|
||||||
|
* **clearsessioncache**: значение `yes` иметь кэш cookie сеанса очищается перед открытием нового окна
|
||||||
|
* **панели инструментов**: набор `yes` или `no` для включения панели инструментов или выключить InAppBrowser (по умолчанию`yes`)
|
||||||
|
* **enableViewportScale**: значение `yes` или `no` для предотвращения просмотра, масштабирования через тег meta (по умолчанию`no`).
|
||||||
|
* **mediaPlaybackRequiresUserAction**: значение `yes` или `no` для предотвращения HTML5 аудио или видео от Автовоспроизведение (по умолчанию`no`).
|
||||||
|
* **allowInlineMediaPlayback**: значение `yes` или `no` чтобы разрешить воспроизведение мультимедиа HTML5 в строки, отображения в окне браузера, а не конкретного устройства воспроизведения интерфейс. HTML `video` элемент должен также включать `webkit-playsinline` атрибут (по умолчанию`no`)
|
||||||
|
* **keyboardDisplayRequiresUserAction**: значение `yes` или `no` чтобы открыть клавиатуру, когда формы элементы получают фокус через JavaScript в `focus()` вызов (по умолчанию`yes`).
|
||||||
|
* **suppressesIncrementalRendering**: значение `yes` или `no` ждать, пока все новое содержание представление получено до визуализации (по умолчанию`no`).
|
||||||
|
* **presentationstyle**: набор `pagesheet` , `formsheet` или `fullscreen` чтобы задать [стиль презентации][1] (по умолчанию`fullscreen`).
|
||||||
|
* **transitionstyle**: набор `fliphorizontal` , `crossdissolve` или `coververtical` чтобы задать [стиль перехода][2] (по умолчанию`coververtical`).
|
||||||
|
* **toolbarposition**: значение `top` или `bottom` (по умолчанию `bottom` ). Вызывает панели инструментов, чтобы быть в верхней или нижней части окна.
|
||||||
|
|
||||||
|
Windows только:
|
||||||
|
|
||||||
|
* **скрытые**: значение `yes` для создания браузера и загрузки страницы, но не показать его. Событие loadstop возникает, когда загрузка завершена. Опустить или набор `no` (по умолчанию), чтобы браузер открыть и загрузить нормально.
|
||||||
|
|
||||||
|
[1]: http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalPresentationStyle
|
||||||
|
[2]: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalTransitionStyle
|
||||||
|
|
||||||
|
### Поддерживаемые платформы
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* BlackBerry 10
|
||||||
|
* Firefox OS
|
||||||
|
* iOS
|
||||||
|
* Windows 8 и 8.1
|
||||||
|
* Windows Phone 7 и 8
|
||||||
|
|
||||||
|
### Пример
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
var ref2 = window.open(encodeURI('http://ja.m.wikipedia.org/wiki/ハングル'), '_blank', 'location=yes');
|
||||||
|
|
||||||
|
|
||||||
|
### Особенности Firefox OS
|
||||||
|
|
||||||
|
Как плагин не применять любой дизайн есть необходимость добавить некоторые правила CSS, если открыт с `target='_blank'` . Правила может выглядеть как эти
|
||||||
|
|
||||||
|
css
|
||||||
|
.inAppBrowserWrap {
|
||||||
|
background-color: rgba(0,0,0,0.75);
|
||||||
|
color: rgba(235,235,235,1.0);
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu {
|
||||||
|
overflow: auto;
|
||||||
|
list-style-type: none;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu li {
|
||||||
|
font-size: 25px;
|
||||||
|
height: 25px;
|
||||||
|
float: left;
|
||||||
|
margin: 0 10px;
|
||||||
|
padding: 3px 10px;
|
||||||
|
text-decoration: none;
|
||||||
|
color: #ccc;
|
||||||
|
display: block;
|
||||||
|
background: rgba(30,30,30,0.50);
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu li.disabled {
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
## Внутренний браузер
|
||||||
|
|
||||||
|
Объект, возвращаемый из вызова`window.open`.
|
||||||
|
|
||||||
|
### Методы
|
||||||
|
|
||||||
|
* addEventListener
|
||||||
|
* removeEventListener
|
||||||
|
* close
|
||||||
|
* show
|
||||||
|
* executeScript
|
||||||
|
* insertCSS
|
||||||
|
|
||||||
|
## addEventListener
|
||||||
|
|
||||||
|
> Добавляет прослушиватель для события от`InAppBrowser`.
|
||||||
|
|
||||||
|
ref.addEventListener(eventname, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ссылка**: ссылка для `InAppBrowser` окно *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **EventName**: событие для прослушивания *(String)*
|
||||||
|
|
||||||
|
* **loadstart**: событие возникает, когда `InAppBrowser` начинает для загрузки URL-адреса.
|
||||||
|
* **loadstop**: событие возникает, когда `InAppBrowser` завершит загрузку URL-адреса.
|
||||||
|
* **loaderror**: событие возникает, когда `InAppBrowser` обнаруживает ошибку при загрузке URL-адреса.
|
||||||
|
* **выход**: возникает событие, когда `InAppBrowser` окно закрыто.
|
||||||
|
|
||||||
|
* **обратного вызова**: функция, которая выполняется, когда возникает событие. Функция передается `InAppBrowserEvent` объект в качестве параметра.
|
||||||
|
|
||||||
|
### InAppBrowserEvent свойства
|
||||||
|
|
||||||
|
* **тип**: eventname, либо `loadstart` , `loadstop` , `loaderror` , или `exit` . *(Строка)*
|
||||||
|
|
||||||
|
* **URL**: URL-адрес, который был загружен. *(Строка)*
|
||||||
|
|
||||||
|
* **код**: код ошибки, только в случае `loaderror` . *(Число)*
|
||||||
|
|
||||||
|
* **сообщение**: сообщение об ошибке, только в случае `loaderror` . *(Строка)*
|
||||||
|
|
||||||
|
### Поддерживаемые платформы
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 и 8.1
|
||||||
|
* Windows Phone 7 и 8
|
||||||
|
|
||||||
|
### Краткий пример
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstart', function(event) { alert(event.url); });
|
||||||
|
|
||||||
|
|
||||||
|
## метод removeEventListener
|
||||||
|
|
||||||
|
> Удаляет прослушиватель для события от`InAppBrowser`.
|
||||||
|
|
||||||
|
ref.removeEventListener(eventname, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ссылка**: ссылка для `InAppBrowser` окно. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **EventName**: событие прекратить прослушивание. *(Строка)*
|
||||||
|
|
||||||
|
* **loadstart**: событие возникает, когда `InAppBrowser` начинает для загрузки URL-адреса.
|
||||||
|
* **loadstop**: событие возникает, когда `InAppBrowser` завершит загрузку URL-адреса.
|
||||||
|
* **loaderror**: событие возникает, когда `InAppBrowser` обнаруживает ошибку загрузки URL-адреса.
|
||||||
|
* **выход**: возникает событие, когда `InAppBrowser` окно закрывается.
|
||||||
|
|
||||||
|
* **обратного вызова**: функция, выполняемая когда это событие наступает. Функция передается `InAppBrowserEvent` объект.
|
||||||
|
|
||||||
|
### Поддерживаемые платформы
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 и 8.1
|
||||||
|
* Windows Phone 7 и 8
|
||||||
|
|
||||||
|
### Краткий пример
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
var myCallback = function(event) { alert(event.url); }
|
||||||
|
ref.addEventListener('loadstart', myCallback);
|
||||||
|
ref.removeEventListener('loadstart', myCallback);
|
||||||
|
|
||||||
|
|
||||||
|
## close
|
||||||
|
|
||||||
|
> Закрывает `InAppBrowser` окно.
|
||||||
|
|
||||||
|
Ref.Close();
|
||||||
|
|
||||||
|
|
||||||
|
* **ссылка**: ссылка на `InAppBrowser` окно *(InAppBrowser)*
|
||||||
|
|
||||||
|
### Поддерживаемые платформы
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* Firefox OS
|
||||||
|
* iOS
|
||||||
|
* Windows 8 и 8.1
|
||||||
|
* Windows Phone 7 и 8
|
||||||
|
|
||||||
|
### Краткий пример
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.close();
|
||||||
|
|
||||||
|
|
||||||
|
## show
|
||||||
|
|
||||||
|
> Отображается окно InAppBrowser, был открыт скрытые. Вызов это не имеет эффекта при InAppBrowser уже был виден.
|
||||||
|
|
||||||
|
Ref.Show();
|
||||||
|
|
||||||
|
|
||||||
|
* **ссылка**: ссылка на окно (InAppBrowser`InAppBrowser`)
|
||||||
|
|
||||||
|
### Поддерживаемые платформы
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 и 8.1
|
||||||
|
|
||||||
|
### Краткий пример
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'hidden=yes');
|
||||||
|
// some time later...
|
||||||
|
ref.show();
|
||||||
|
|
||||||
|
|
||||||
|
## executeScript
|
||||||
|
|
||||||
|
> Вставляет код JavaScript в `InAppBrowser` окно
|
||||||
|
|
||||||
|
ref.executeScript(details, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ссылка**: ссылка на `InAppBrowser` окно. *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **injectDetails**: подробности сценария для запуска, указав либо `file` или `code` ключ. *(Объект)*
|
||||||
|
|
||||||
|
* **файл**: URL-адрес сценария вставки.
|
||||||
|
* **код**: текст сценария для вставки.
|
||||||
|
|
||||||
|
* **обратного вызова**: функция, которая выполняет после вводят JavaScript-код.
|
||||||
|
|
||||||
|
* Если введенный скрипт имеет тип `code` , обратный вызов выполняется с одним параметром, который является возвращаемое значение сценария, завернутые в `Array` . Для многострочных сценариев это возвращаемое значение последнего оператора, или последнее вычисленное выражение.
|
||||||
|
|
||||||
|
### Поддерживаемые платформы
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
* Windows 8 и 8.1
|
||||||
|
|
||||||
|
### Краткий пример
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.executeScript({file: "myscript.js"});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
## insertCSS
|
||||||
|
|
||||||
|
> Внедряет CSS в `InAppBrowser` окно.
|
||||||
|
|
||||||
|
ref.insertCSS(details, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ссылка**: ссылка на `InAppBrowser` окно *(InAppBrowser)*
|
||||||
|
|
||||||
|
* **injectDetails**: детали сценария для запуска, указав либо `file` или `code` ключ. *(Объект)*
|
||||||
|
|
||||||
|
* **файл**: URL-адрес таблицы стилей для вставки.
|
||||||
|
* **код**: текст таблицы стилей для вставки.
|
||||||
|
|
||||||
|
* **обратного вызова**: функция, которая выполняет после вводят CSS.
|
||||||
|
|
||||||
|
### Поддерживаемые платформы
|
||||||
|
|
||||||
|
* Amazon Fire OS
|
||||||
|
* Android
|
||||||
|
* iOS
|
||||||
|
|
||||||
|
### Краткий пример
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.insertCSS({file: "mystyles.css"});
|
||||||
|
});
|
||||||
+330
@@ -0,0 +1,330 @@
|
|||||||
|
<!---
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
# org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
|
這個外掛程式提供了一個 web 瀏覽器視圖,顯示在調用時`window.open()`.
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
|
||||||
|
|
||||||
|
**注**: InAppBrowser 視窗的行為像一個標準的 web 瀏覽器,並且無法訪問科爾多瓦的 Api。
|
||||||
|
|
||||||
|
## 安裝
|
||||||
|
|
||||||
|
cordova plugin add org.apache.cordova.inappbrowser
|
||||||
|
|
||||||
|
|
||||||
|
## window.open
|
||||||
|
|
||||||
|
在一個新打開一個 URL `InAppBrowser` 實例,當前的瀏覽器實例或系統瀏覽器。
|
||||||
|
|
||||||
|
var ref = window.open(url, target, options);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: 參考 `InAppBrowser` 視窗。*() InAppBrowser*
|
||||||
|
|
||||||
|
* **url**: 要載入*(字串)*的 URL。調用 `encodeURI()` 這個如果 URL 包含 Unicode 字元。
|
||||||
|
|
||||||
|
* **目標**: 目標在其中載入的 URL,可選參數,預設值為 `_self` 。*(字串)*
|
||||||
|
|
||||||
|
* `_self`: 打開在科爾多瓦 web 視圖如果 URL 是在白名單中,否則它在打開`InAppBrowser`.
|
||||||
|
* `_blank`: 在打開`InAppBrowser`.
|
||||||
|
* `_system`: 在該系統的 web 瀏覽器中打開。
|
||||||
|
|
||||||
|
* **選項**: 選項為 `InAppBrowser` 。可選,拖欠到: `location=yes` 。*(字串)*
|
||||||
|
|
||||||
|
`options`字串必須不包含任何空白的空間,和必須用逗號分隔每個功能的名稱/值對。 功能名稱區分大小寫。 所有平臺都支援下面的值:
|
||||||
|
|
||||||
|
* **位置**: 設置為 `yes` 或 `no` ,打開 `InAppBrowser` 的位置欄打開或關閉。
|
||||||
|
|
||||||
|
Android 系統只有:
|
||||||
|
|
||||||
|
* **closebuttoncaption**: 設置為一個字串,以用作**做**按鈕的標題。
|
||||||
|
* **隱藏**: 將設置為 `yes` ,創建瀏覽器和載入頁面,但不是顯示它。 載入完成時,將觸發 loadstop 事件。 省略或設置為 `no` (預設值),有的瀏覽器打開,然後以正常方式載入。
|
||||||
|
* **clearcache**: 將設置為 `yes` 有瀏覽器的 cookie 清除緩存之前打開新視窗
|
||||||
|
* **clearsessioncache**: 將設置為 `yes` 有會話 cookie 緩存清除之前打開新視窗
|
||||||
|
|
||||||
|
只有 iOS:
|
||||||
|
|
||||||
|
* **closebuttoncaption**: 設置為一個字串,以用作**做**按鈕的標題。請注意您需要對此值進行當地語系化你自己。
|
||||||
|
* **disallowoverscroll**: 將設置為 `yes` 或 `no` (預設值是 `no` )。打開/關閉的 UIWebViewBounce 屬性。
|
||||||
|
* **隱藏**: 將設置為 `yes` ,創建瀏覽器和載入頁面,但不是顯示它。 載入完成時,將觸發 loadstop 事件。 省略或設置為 `no` (預設值),有的瀏覽器打開,然後以正常方式載入。
|
||||||
|
* **clearcache**: 將設置為 `yes` 有瀏覽器的 cookie 清除緩存之前打開新視窗
|
||||||
|
* **clearsessioncache**: 將設置為 `yes` 有會話 cookie 緩存清除之前打開新視窗
|
||||||
|
* **工具列**: 設置為 `yes` 或 `no` ,為 InAppBrowser (預設為打開或關閉工具列`yes`)
|
||||||
|
* **enableViewportScale**: 將設置為 `yes` 或 `no` ,防止通過 meta 標記 (預設為縮放的視區`no`).
|
||||||
|
* **mediaPlaybackRequiresUserAction**: 將設置為 `yes` 或 `no` ,防止 HTML5 音訊或視頻從 autoplaying (預設為`no`).
|
||||||
|
* **allowInlineMediaPlayback**: 將設置為 `yes` 或 `no` ,讓線在 HTML5 播放媒體,在瀏覽器視窗中,而不是特定于設備播放介面內顯示。 HTML 的 `video` 元素還必須包括 `webkit-playsinline` 屬性 (預設為`no`)
|
||||||
|
* **keyboardDisplayRequiresUserAction**: 將設置為 `yes` 或 `no` 時,要打開鍵盤表單元素接收焦點通過 JavaScript 的 `focus()` 調用 (預設為`yes`).
|
||||||
|
* **suppressesIncrementalRendering**: 將設置為 `yes` 或 `no` 等待,直到所有新查看的內容正在呈現 (預設為前收到`no`).
|
||||||
|
* **presentationstyle**: 將設置為 `pagesheet` , `formsheet` 或 `fullscreen` 來設置[演示文稿樣式][1](預設為`fullscreen`).
|
||||||
|
* **transitionstyle**: 將設置為 `fliphorizontal` , `crossdissolve` 或 `coververtical` 設置[過渡樣式][2](預設為`coververtical`).
|
||||||
|
* **toolbarposition**: 將設置為 `top` 或 `bottom` (預設值是 `bottom` )。使工具列,則在頂部或底部的視窗。
|
||||||
|
|
||||||
|
僅限 Windows:
|
||||||
|
|
||||||
|
* **隱藏**: 將設置為 `yes` ,創建瀏覽器並載入頁面,但不是顯示它。 載入完成時,將觸發 loadstop 事件。 省略或被設置為 `no` (預設值),有的瀏覽器打開,以正常方式載入。
|
||||||
|
|
||||||
|
[1]: http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalPresentationStyle
|
||||||
|
[2]: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalTransitionStyle
|
||||||
|
|
||||||
|
### 支援的平臺
|
||||||
|
|
||||||
|
* 亞馬遜火 OS
|
||||||
|
* Android 系統
|
||||||
|
* 黑莓 10
|
||||||
|
* 火狐瀏覽器的作業系統
|
||||||
|
* iOS
|
||||||
|
* Windows 8 和 8.1
|
||||||
|
* Windows Phone 7 和 8
|
||||||
|
|
||||||
|
### 示例
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
var ref2 = window.open(encodeURI('http://ja.m.wikipedia.org/wiki/ハングル'), '_blank', 'location=yes');
|
||||||
|
|
||||||
|
|
||||||
|
### 火狐瀏覽器作業系統的怪癖
|
||||||
|
|
||||||
|
外掛程式不會執行任何的設計是需要添加一些 CSS 規則,如果打開的 `target='_blank'` 。規則 》 可能看起來像這些
|
||||||
|
|
||||||
|
css
|
||||||
|
.inAppBrowserWrap {
|
||||||
|
background-color: rgba(0,0,0,0.75);
|
||||||
|
color: rgba(235,235,235,1.0);
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu {
|
||||||
|
overflow: auto;
|
||||||
|
list-style-type: none;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu li {
|
||||||
|
font-size: 25px;
|
||||||
|
height: 25px;
|
||||||
|
float: left;
|
||||||
|
margin: 0 10px;
|
||||||
|
padding: 3px 10px;
|
||||||
|
text-decoration: none;
|
||||||
|
color: #ccc;
|
||||||
|
display: block;
|
||||||
|
background: rgba(30,30,30,0.50);
|
||||||
|
}
|
||||||
|
.inAppBrowserWrap menu li.disabled {
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
## InAppBrowser
|
||||||
|
|
||||||
|
從調用返回的物件`window.open`.
|
||||||
|
|
||||||
|
### 方法
|
||||||
|
|
||||||
|
* addEventListener
|
||||||
|
* removeEventListener
|
||||||
|
* close
|
||||||
|
* show
|
||||||
|
* executeScript
|
||||||
|
* insertCSS
|
||||||
|
|
||||||
|
## addEventListener
|
||||||
|
|
||||||
|
> 為事件添加一個攔截器`InAppBrowser`.
|
||||||
|
|
||||||
|
ref.addEventListener(eventname, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: 參考 `InAppBrowser` 視窗*(InAppBrowser)*
|
||||||
|
|
||||||
|
* **事件名稱**: 事件偵聽*(字串)*
|
||||||
|
|
||||||
|
* **loadstart**: 當觸發事件 `InAppBrowser` 開始載入一個 URL。
|
||||||
|
* **loadstop**: 當觸發事件 `InAppBrowser` 完成載入一個 URL。
|
||||||
|
* **loaderror**: 當觸發事件 `InAppBrowser` 載入 URL 時遇到錯誤。
|
||||||
|
* **退出**: 當觸發事件 `InAppBrowser` 關閉視窗。
|
||||||
|
|
||||||
|
* **回檔**: 執行時觸發該事件的函數。該函數通過 `InAppBrowserEvent` 物件作為參數。
|
||||||
|
|
||||||
|
### InAppBrowserEvent 屬性
|
||||||
|
|
||||||
|
* **類型**: eventname,或者 `loadstart` , `loadstop` , `loaderror` ,或 `exit` 。*(字串)*
|
||||||
|
|
||||||
|
* **url**: 已載入的 URL。*(字串)*
|
||||||
|
|
||||||
|
* **代碼**: 僅中的情況的錯誤代碼 `loaderror` 。*(人數)*
|
||||||
|
|
||||||
|
* **消息**: 該錯誤訊息,只有在的情況下 `loaderror` 。*(字串)*
|
||||||
|
|
||||||
|
### 支援的平臺
|
||||||
|
|
||||||
|
* 亞馬遜火 OS
|
||||||
|
* Android 系統
|
||||||
|
* iOS
|
||||||
|
* Windows 8 和 8.1
|
||||||
|
* Windows Phone 7 和 8
|
||||||
|
|
||||||
|
### 快速的示例
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstart', function(event) { alert(event.url); });
|
||||||
|
|
||||||
|
|
||||||
|
## removeEventListener
|
||||||
|
|
||||||
|
> 移除的事件攔截器`InAppBrowser`.
|
||||||
|
|
||||||
|
ref.removeEventListener(eventname, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: 參考 `InAppBrowser` 視窗。*() InAppBrowser*
|
||||||
|
|
||||||
|
* **事件名稱**: 要停止偵聽的事件。*(字串)*
|
||||||
|
|
||||||
|
* **loadstart**: 當觸發事件 `InAppBrowser` 開始載入一個 URL。
|
||||||
|
* **loadstop**: 當觸發事件 `InAppBrowser` 完成載入一個 URL。
|
||||||
|
* **loaderror**: 當觸發事件 `InAppBrowser` 遇到錯誤載入一個 URL。
|
||||||
|
* **退出**: 當觸發事件 `InAppBrowser` 關閉視窗。
|
||||||
|
|
||||||
|
* **回檔**: 要在事件觸發時執行的函數。該函數通過 `InAppBrowserEvent` 物件。
|
||||||
|
|
||||||
|
### 支援的平臺
|
||||||
|
|
||||||
|
* 亞馬遜火 OS
|
||||||
|
* Android 系統
|
||||||
|
* iOS
|
||||||
|
* Windows 8 和 8.1
|
||||||
|
* Windows Phone 7 和 8
|
||||||
|
|
||||||
|
### 快速的示例
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
var myCallback = function(event) { alert(event.url); }
|
||||||
|
ref.addEventListener('loadstart', myCallback);
|
||||||
|
ref.removeEventListener('loadstart', myCallback);
|
||||||
|
|
||||||
|
|
||||||
|
## close
|
||||||
|
|
||||||
|
> 關閉 `InAppBrowser` 視窗。
|
||||||
|
|
||||||
|
ref.close() ;
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: 參考 `InAppBrowser` 視窗*(InAppBrowser)*
|
||||||
|
|
||||||
|
### 支援的平臺
|
||||||
|
|
||||||
|
* 亞馬遜火 OS
|
||||||
|
* Android 系統
|
||||||
|
* 火狐瀏覽器的作業系統
|
||||||
|
* iOS
|
||||||
|
* Windows 8 和 8.1
|
||||||
|
* Windows Phone 7 和 8
|
||||||
|
|
||||||
|
### 快速的示例
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.close();
|
||||||
|
|
||||||
|
|
||||||
|
## show
|
||||||
|
|
||||||
|
> 顯示打開了隱藏的 InAppBrowser 視窗。調用這沒有任何影響,如果 InAppBrowser 是已經可見。
|
||||||
|
|
||||||
|
ref.show() ;
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: InAppBrowser 視窗 (參考`InAppBrowser`)
|
||||||
|
|
||||||
|
### 支援的平臺
|
||||||
|
|
||||||
|
* 亞馬遜火 OS
|
||||||
|
* Android 系統
|
||||||
|
* iOS
|
||||||
|
* Windows 8 和 8.1
|
||||||
|
|
||||||
|
### 快速的示例
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'hidden=yes');
|
||||||
|
// some time later...
|
||||||
|
ref.show();
|
||||||
|
|
||||||
|
|
||||||
|
## executeScript
|
||||||
|
|
||||||
|
> 注入到 JavaScript 代碼 `InAppBrowser` 視窗
|
||||||
|
|
||||||
|
ref.executeScript(details, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: 參考 `InAppBrowser` 視窗。*() InAppBrowser*
|
||||||
|
|
||||||
|
* **injectDetails**: 要運行的腳本的詳細資訊或指定 `file` 或 `code` 的關鍵。*(物件)*
|
||||||
|
|
||||||
|
* **檔**: 腳本的 URL 來注入。
|
||||||
|
* **代碼**: 要注入腳本的文本。
|
||||||
|
|
||||||
|
* **回檔**: 執行後注入的 JavaScript 代碼的函數。
|
||||||
|
|
||||||
|
* 如果插入的腳本的類型 `code` ,回檔執行使用單個參數,這是該腳本的傳回值,裹在 `Array` 。 對於多行腳本,這是最後一條語句或最後計算的運算式的傳回值。
|
||||||
|
|
||||||
|
### 支援的平臺
|
||||||
|
|
||||||
|
* 亞馬遜火 OS
|
||||||
|
* Android 系統
|
||||||
|
* iOS
|
||||||
|
* Windows 8 和 8.1
|
||||||
|
|
||||||
|
### 快速的示例
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.executeScript({file: "myscript.js"});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
## insertCSS
|
||||||
|
|
||||||
|
> 注入到 CSS `InAppBrowser` 視窗。
|
||||||
|
|
||||||
|
ref.insertCSS(details, callback);
|
||||||
|
|
||||||
|
|
||||||
|
* **ref**: 參考 `InAppBrowser` 視窗*(InAppBrowser)*
|
||||||
|
|
||||||
|
* **injectDetails**: 要運行的腳本的詳細資訊或指定 `file` 或 `code` 的關鍵。*(物件)*
|
||||||
|
|
||||||
|
* **檔**: 樣式表的 URL 來注入。
|
||||||
|
* **代碼**: 文本樣式表的注入。
|
||||||
|
|
||||||
|
* **回檔**: 在 CSS 注射後執行的函數。
|
||||||
|
|
||||||
|
### 支援的平臺
|
||||||
|
|
||||||
|
* 亞馬遜火 OS
|
||||||
|
* Android 系統
|
||||||
|
* iOS
|
||||||
|
|
||||||
|
### 快速的示例
|
||||||
|
|
||||||
|
var ref = window.open('http://apache.org', '_blank', 'location=yes');
|
||||||
|
ref.addEventListener('loadstop', function() {
|
||||||
|
ref.insertCSS({file: "mystyles.css"});
|
||||||
|
});
|
||||||
+80
-5
@@ -1,8 +1,26 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
|
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
|
||||||
id="org.apache.cordova.inappbrowser"
|
id="org.apache.cordova.inappbrowser"
|
||||||
version="0.3.2">
|
version="0.6.0">
|
||||||
|
|
||||||
<name>InAppBrowser</name>
|
<name>InAppBrowser</name>
|
||||||
<description>Cordova InAppBrowser Plugin</description>
|
<description>Cordova InAppBrowser Plugin</description>
|
||||||
@@ -14,7 +32,7 @@
|
|||||||
<engines>
|
<engines>
|
||||||
<engine name="cordova" version=">=3.1.0" /><!-- Needs cordova/urlutil -->
|
<engine name="cordova" version=">=3.1.0" /><!-- Needs cordova/urlutil -->
|
||||||
</engines>
|
</engines>
|
||||||
|
|
||||||
<!-- android -->
|
<!-- android -->
|
||||||
<platform name="android">
|
<platform name="android">
|
||||||
<js-module src="www/inappbrowser.js" name="inappbrowser">
|
<js-module src="www/inappbrowser.js" name="inappbrowser">
|
||||||
@@ -27,6 +45,7 @@
|
|||||||
</config-file>
|
</config-file>
|
||||||
|
|
||||||
<source-file src="src/android/InAppBrowser.java" target-dir="src/org/apache/cordova/inappbrowser" />
|
<source-file src="src/android/InAppBrowser.java" target-dir="src/org/apache/cordova/inappbrowser" />
|
||||||
|
<source-file src="src/android/InAppBrowserDialog.java" target-dir="src/org/apache/cordova/inappbrowser" />
|
||||||
<source-file src="src/android/InAppChromeClient.java" target-dir="src/org/apache/cordova/inappbrowser" />
|
<source-file src="src/android/InAppChromeClient.java" target-dir="src/org/apache/cordova/inappbrowser" />
|
||||||
|
|
||||||
<!-- drawable src/android/resources -->
|
<!-- drawable src/android/resources -->
|
||||||
@@ -46,7 +65,7 @@
|
|||||||
<resource-file src="src/android/res/drawable-xxhdpi/ic_action_remove.png" target="res/drawable-xxhdpi/ic_action_remove.png" />
|
<resource-file src="src/android/res/drawable-xxhdpi/ic_action_remove.png" target="res/drawable-xxhdpi/ic_action_remove.png" />
|
||||||
|
|
||||||
</platform>
|
</platform>
|
||||||
|
|
||||||
<!-- amazon-fireos -->
|
<!-- amazon-fireos -->
|
||||||
<platform name="amazon-fireos">
|
<platform name="amazon-fireos">
|
||||||
<js-module src="www/inappbrowser.js" name="inappbrowser">
|
<js-module src="www/inappbrowser.js" name="inappbrowser">
|
||||||
@@ -59,9 +78,26 @@
|
|||||||
</config-file>
|
</config-file>
|
||||||
|
|
||||||
<source-file src="src/amazon/InAppBrowser.java" target-dir="src/org/apache/cordova/inappbrowser" />
|
<source-file src="src/amazon/InAppBrowser.java" target-dir="src/org/apache/cordova/inappbrowser" />
|
||||||
|
<source-file src="src/android/InAppBrowserDialog.java" target-dir="src/org/apache/cordova/inappbrowser" />
|
||||||
<source-file src="src/amazon/InAppChromeClient.java" target-dir="src/org/apache/cordova/inappbrowser" />
|
<source-file src="src/amazon/InAppChromeClient.java" target-dir="src/org/apache/cordova/inappbrowser" />
|
||||||
|
|
||||||
|
<!-- drawable src/android/resources -->
|
||||||
|
<resource-file src="src/android/res/drawable-hdpi/ic_action_next_item.png" target="res/drawable-hdpi/ic_action_next_item.png" />
|
||||||
|
<resource-file src="src/android/res/drawable-mdpi/ic_action_next_item.png" target="res/drawable-mdpi/ic_action_next_item.png" />
|
||||||
|
<resource-file src="src/android/res/drawable-xhdpi/ic_action_next_item.png" target="res/drawable-xhdpi/ic_action_next_item.png" />
|
||||||
|
<resource-file src="src/android/res/drawable-xxhdpi/ic_action_next_item.png" target="res/drawable-xxhdpi/ic_action_next_item.png" />
|
||||||
|
|
||||||
|
<resource-file src="src/android/res/drawable-hdpi/ic_action_previous_item.png" target="res/drawable-hdpi/ic_action_previous_item.png" />
|
||||||
|
<resource-file src="src/android/res/drawable-mdpi/ic_action_previous_item.png" target="res/drawable-mdpi/ic_action_previous_item.png" />
|
||||||
|
<resource-file src="src/android/res/drawable-xhdpi/ic_action_previous_item.png" target="res/drawable-xhdpi/ic_action_previous_item.png" />
|
||||||
|
<resource-file src="src/android/res/drawable-xxhdpi/ic_action_previous_item.png" target="res/drawable-xxhdpi/ic_action_previous_item.png" />
|
||||||
|
|
||||||
|
<resource-file src="src/android/res/drawable-hdpi/ic_action_remove.png" target="res/drawable-hdpi/ic_action_remove.png" />
|
||||||
|
<resource-file src="src/android/res/drawable-mdpi/ic_action_remove.png" target="res/drawable-mdpi/ic_action_remove.png" />
|
||||||
|
<resource-file src="src/android/res/drawable-xhdpi/ic_action_remove.png" target="res/drawable-xhdpi/ic_action_remove.png" />
|
||||||
|
<resource-file src="src/android/res/drawable-xxhdpi/ic_action_remove.png" target="res/drawable-xxhdpi/ic_action_remove.png" />
|
||||||
</platform>
|
</platform>
|
||||||
|
|
||||||
<!-- ubuntu -->
|
<!-- ubuntu -->
|
||||||
<platform name="ubuntu">
|
<platform name="ubuntu">
|
||||||
<js-module src="www/inappbrowser.js" name="inappbrowser">
|
<js-module src="www/inappbrowser.js" name="inappbrowser">
|
||||||
@@ -70,6 +106,7 @@
|
|||||||
<header-file src="src/ubuntu/inappbrowser.h" />
|
<header-file src="src/ubuntu/inappbrowser.h" />
|
||||||
<source-file src="src/ubuntu/inappbrowser.cpp" />
|
<source-file src="src/ubuntu/inappbrowser.cpp" />
|
||||||
<resource-file src="src/ubuntu/InAppBrowser.qml" />
|
<resource-file src="src/ubuntu/InAppBrowser.qml" />
|
||||||
|
<resource-file src="src/ubuntu/InAppBrowser_escapeScript.js" />
|
||||||
<resource-file src="src/ubuntu/close.png" />
|
<resource-file src="src/ubuntu/close.png" />
|
||||||
</platform>
|
</platform>
|
||||||
|
|
||||||
@@ -92,6 +129,10 @@
|
|||||||
|
|
||||||
<!-- wp7 -->
|
<!-- wp7 -->
|
||||||
<platform name="wp7">
|
<platform name="wp7">
|
||||||
|
<config-file target="Properties/WMAppManifest.xml" parent="/Deployment/App/Capabilities">
|
||||||
|
<Capability Name="ID_CAP_NETWORKING"/>
|
||||||
|
</config-file>
|
||||||
|
|
||||||
<js-module src="www/inappbrowser.js" name="inappbrowser">
|
<js-module src="www/inappbrowser.js" name="inappbrowser">
|
||||||
<clobbers target="window.open" />
|
<clobbers target="window.open" />
|
||||||
</js-module>
|
</js-module>
|
||||||
@@ -101,11 +142,19 @@
|
|||||||
</feature>
|
</feature>
|
||||||
</config-file>
|
</config-file>
|
||||||
|
|
||||||
|
<config-file target="Properties/WMAppManifest.xml" parent="/Deployment/App/Capabilities">
|
||||||
|
<Capability Name="ID_CAP_NETWORKING" />
|
||||||
|
</config-file>
|
||||||
|
|
||||||
<source-file src="src/wp/InAppBrowser.cs" />
|
<source-file src="src/wp/InAppBrowser.cs" />
|
||||||
</platform>
|
</platform>
|
||||||
|
|
||||||
<!-- wp8 -->
|
<!-- wp8 -->
|
||||||
<platform name="wp8">
|
<platform name="wp8">
|
||||||
|
<config-file target="Properties/WMAppManifest.xml" parent="/Deployment/App/Capabilities">
|
||||||
|
<Capability Name="ID_CAP_NETWORKING"/>
|
||||||
|
</config-file>
|
||||||
|
|
||||||
<js-module src="www/inappbrowser.js" name="inappbrowser">
|
<js-module src="www/inappbrowser.js" name="inappbrowser">
|
||||||
<clobbers target="window.open" />
|
<clobbers target="window.open" />
|
||||||
</js-module>
|
</js-module>
|
||||||
@@ -115,6 +164,10 @@
|
|||||||
</feature>
|
</feature>
|
||||||
</config-file>
|
</config-file>
|
||||||
|
|
||||||
|
<config-file target="Properties/WMAppManifest.xml" parent="/Deployment/App/Capabilities">
|
||||||
|
<Capability Name="ID_CAP_NETWORKING" />
|
||||||
|
</config-file>
|
||||||
|
|
||||||
<source-file src="src/wp/InAppBrowser.cs" />
|
<source-file src="src/wp/InAppBrowser.cs" />
|
||||||
</platform>
|
</platform>
|
||||||
|
|
||||||
@@ -127,6 +180,28 @@
|
|||||||
<merges target="" />
|
<merges target="" />
|
||||||
</js-module>
|
</js-module>
|
||||||
</platform>
|
</platform>
|
||||||
|
|
||||||
|
<!-- windows universal apps (Windows 8.1, Windows Phone 8.1, Windows 8.0) -->
|
||||||
|
<platform name="windows">
|
||||||
|
<js-module src="www/inappbrowser.js" name="inappbrowser">
|
||||||
|
<clobbers target="window.open" />
|
||||||
|
</js-module>
|
||||||
|
<js-module src="src/windows/InAppBrowserProxy.js" name="InAppBrowserProxy">
|
||||||
|
<merges target="" />
|
||||||
|
</js-module>
|
||||||
|
</platform>
|
||||||
|
|
||||||
|
<!-- firefoxos -->
|
||||||
|
<platform name="firefoxos">
|
||||||
|
<config-file target="config.xml" parent="/*">
|
||||||
|
<permission name="browser" description="Enables the app to implement a browser in an iframe." privileged="true"/>
|
||||||
|
</config-file>
|
||||||
|
<js-module src="www/inappbrowser.js" name="inappbrowser">
|
||||||
|
<clobbers target="window.open" />
|
||||||
|
</js-module>
|
||||||
|
<js-module src="src/firefoxos/InAppBrowserProxy.js" name="InAppBrowserProxy">
|
||||||
|
<merges target="" />
|
||||||
|
</js-module>
|
||||||
|
</platform>
|
||||||
|
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|||||||
@@ -19,12 +19,15 @@
|
|||||||
package org.apache.cordova.inappbrowser;
|
package org.apache.cordova.inappbrowser;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Dialog;
|
import org.apache.cordova.inappbrowser.InAppBrowserDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.InputType;
|
import android.text.InputType;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -78,17 +81,15 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
private static final String LOAD_START_EVENT = "loadstart";
|
private static final String LOAD_START_EVENT = "loadstart";
|
||||||
private static final String LOAD_STOP_EVENT = "loadstop";
|
private static final String LOAD_STOP_EVENT = "loadstop";
|
||||||
private static final String LOAD_ERROR_EVENT = "loaderror";
|
private static final String LOAD_ERROR_EVENT = "loaderror";
|
||||||
private static final String CLOSE_BUTTON_CAPTION = "closebuttoncaption";
|
|
||||||
private static final String CLEAR_ALL_CACHE = "clearcache";
|
private static final String CLEAR_ALL_CACHE = "clearcache";
|
||||||
private static final String CLEAR_SESSION_CACHE = "clearsessioncache";
|
private static final String CLEAR_SESSION_CACHE = "clearsessioncache";
|
||||||
|
|
||||||
private Dialog dialog;
|
private InAppBrowserDialog dialog;
|
||||||
private AmazonWebView inAppWebView;
|
private AmazonWebView inAppWebView;
|
||||||
private EditText edittext;
|
private EditText edittext;
|
||||||
private CallbackContext callbackContext;
|
private CallbackContext callbackContext;
|
||||||
private boolean showLocationBar = true;
|
private boolean showLocationBar = true;
|
||||||
private boolean openWindowHidden = false;
|
private boolean openWindowHidden = false;
|
||||||
private String buttonLabel = "Done";
|
|
||||||
private boolean clearAllCache= false;
|
private boolean clearAllCache= false;
|
||||||
private boolean clearSessionCache=false;
|
private boolean clearSessionCache=false;
|
||||||
|
|
||||||
@@ -123,21 +124,24 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
// load in webview
|
// load in webview
|
||||||
if (url.startsWith("file://") || url.startsWith("javascript:")
|
if (url.startsWith("file://") || url.startsWith("javascript:")
|
||||||
|| Config.isUrlWhiteListed(url)) {
|
|| Config.isUrlWhiteListed(url)) {
|
||||||
|
Log.d(LOG_TAG, "loading in webview");
|
||||||
webView.loadUrl(url);
|
webView.loadUrl(url);
|
||||||
}
|
}
|
||||||
//Load the dialer
|
//Load the dialer
|
||||||
else if (url.startsWith(AmazonWebView.SCHEME_TEL))
|
else if (url.startsWith(AmazonWebView.SCHEME_TEL))
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
Log.d(LOG_TAG, "loading in dialer");
|
||||||
Intent intent = new Intent(Intent.ACTION_DIAL);
|
Intent intent = new Intent(Intent.ACTION_DIAL);
|
||||||
intent.setData(Uri.parse(url));
|
intent.setData(Uri.parse(url));
|
||||||
cordova.getActivity().startActivity(intent);
|
cordova.getActivity().startActivity(intent);
|
||||||
} catch (android.content.ActivityNotFoundException e) {
|
} catch (android.content.ActivityNotFoundException e) {
|
||||||
LOG.e(LOG_TAG, "Error dialing " + url + ": " + e.toString());
|
LOG.e(LOG_TAG, "Error dialing " + url + ": " + e.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// load in InAppBrowser
|
// load in InAppBrowser
|
||||||
else {
|
else {
|
||||||
|
Log.d(LOG_TAG, "loading in InAppBrowser");
|
||||||
result = showWebPage(url, features);
|
result = showWebPage(url, features);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -256,11 +260,16 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
scriptToInject = source;
|
scriptToInject = source;
|
||||||
}
|
}
|
||||||
final String finalScriptToInject = scriptToInject;
|
final String finalScriptToInject = scriptToInject;
|
||||||
// This action will have the side-effect of blurring the currently focused element
|
|
||||||
this.cordova.getActivity().runOnUiThread(new Runnable() {
|
this.cordova.getActivity().runOnUiThread(new Runnable() {
|
||||||
|
@SuppressLint("NewApi")
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
inAppWebView.loadUrl("javascript:" + finalScriptToInject);
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
|
||||||
|
// This action will have the side-effect of blurring the currently focused element
|
||||||
|
inAppWebView.loadUrl("javascript:" + finalScriptToInject);
|
||||||
|
} /*else {
|
||||||
|
inAppWebView.evaluateJavascript(finalScriptToInject, null);
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -282,12 +291,8 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
option = new StringTokenizer(features.nextToken(), "=");
|
option = new StringTokenizer(features.nextToken(), "=");
|
||||||
if (option.hasMoreElements()) {
|
if (option.hasMoreElements()) {
|
||||||
String key = option.nextToken();
|
String key = option.nextToken();
|
||||||
if (key.equalsIgnoreCase(CLOSE_BUTTON_CAPTION)) {
|
Boolean value = option.nextToken().equals("no") ? Boolean.FALSE : Boolean.TRUE;
|
||||||
this.buttonLabel = option.nextToken();
|
map.put(key, value);
|
||||||
} else {
|
|
||||||
Boolean value = option.nextToken().equals("no") ? Boolean.FALSE : Boolean.TRUE;
|
|
||||||
map.put(key, value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return map;
|
return map;
|
||||||
@@ -305,7 +310,14 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
try {
|
try {
|
||||||
Intent intent = null;
|
Intent intent = null;
|
||||||
intent = new Intent(Intent.ACTION_VIEW);
|
intent = new Intent(Intent.ACTION_VIEW);
|
||||||
intent.setData(Uri.parse(url));
|
// Omitting the MIME type for file: URLs causes "No Activity found to handle Intent".
|
||||||
|
// Adding the MIME type to http: URLs causes them to not be handled by the downloader.
|
||||||
|
Uri uri = Uri.parse(url);
|
||||||
|
if ("file".equals(uri.getScheme())) {
|
||||||
|
intent.setDataAndType(uri, webView.getResourceApi().getMimeType(uri));
|
||||||
|
} else {
|
||||||
|
intent.setData(uri);
|
||||||
|
}
|
||||||
this.cordova.getActivity().startActivity(intent);
|
this.cordova.getActivity().startActivity(intent);
|
||||||
return "";
|
return "";
|
||||||
} catch (android.content.ActivityNotFoundException e) {
|
} catch (android.content.ActivityNotFoundException e) {
|
||||||
@@ -318,16 +330,38 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
* Closes the dialog
|
* Closes the dialog
|
||||||
*/
|
*/
|
||||||
public void closeDialog() {
|
public void closeDialog() {
|
||||||
|
final AmazonWebView childView = this.inAppWebView;
|
||||||
|
// The JS protects against multiple calls, so this should happen only when
|
||||||
|
// closeDialog() is called by other native code.
|
||||||
|
if (childView == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.cordova.getActivity().runOnUiThread(new Runnable() {
|
this.cordova.getActivity().runOnUiThread(new Runnable() {
|
||||||
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (dialog != null) {
|
childView.setWebViewClient(new AmazonWebViewClient() {
|
||||||
dialog.dismiss();
|
// NB: wait for about:blank before dismissing
|
||||||
}
|
public void onPageFinished(AmazonWebView view, String url) {
|
||||||
|
if (dialog != null) {
|
||||||
|
dialog.dismiss();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// NB: From SDK 19: "If you call methods on WebView from any thread
|
||||||
|
// other than your app's UI thread, it can cause unexpected results."
|
||||||
|
// http://developer.android.com/guide/webapps/migrating.html#Threads
|
||||||
|
childView.loadUrl("about:blank");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
JSONObject obj = new JSONObject();
|
||||||
|
obj.put("type", EXIT_EVENT);
|
||||||
|
sendUpdate(obj, false);
|
||||||
|
} catch (JSONException ex) {
|
||||||
|
Log.d(LOG_TAG, "Should never happen");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks to see if it is possible to go back one page in history, then does so.
|
* Checks to see if it is possible to go back one page in history, then does so.
|
||||||
*/
|
*/
|
||||||
@@ -385,6 +419,10 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
return this.showLocationBar;
|
return this.showLocationBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private InAppBrowser getInAppBrowser(){
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Display a new browser with the specified URL.
|
* Display a new browser with the specified URL.
|
||||||
*
|
*
|
||||||
@@ -433,17 +471,14 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("NewApi")
|
||||||
public void run() {
|
public void run() {
|
||||||
// Let's create the main dialog
|
// Let's create the main dialog
|
||||||
dialog = new Dialog(cordova.getActivity(), android.R.style.Theme_NoTitleBar);
|
dialog = new InAppBrowserDialog(cordova.getActivity(), android.R.style.Theme_NoTitleBar);
|
||||||
dialog.getWindow().getAttributes().windowAnimations = android.R.style.Animation_Dialog;
|
dialog.getWindow().getAttributes().windowAnimations = android.R.style.Animation_Dialog;
|
||||||
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||||
dialog.setCancelable(true);
|
dialog.setCancelable(true);
|
||||||
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
|
dialog.setInAppBroswer(getInAppBrowser());
|
||||||
public void onDismiss(DialogInterface dialog) {
|
|
||||||
closeDialog();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Main container layout
|
// Main container layout
|
||||||
LinearLayout main = new LinearLayout(cordova.getActivity());
|
LinearLayout main = new LinearLayout(cordova.getActivity());
|
||||||
@@ -472,7 +507,18 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
back.setLayoutParams(backLayoutParams);
|
back.setLayoutParams(backLayoutParams);
|
||||||
back.setContentDescription("Back Button");
|
back.setContentDescription("Back Button");
|
||||||
back.setId(2);
|
back.setId(2);
|
||||||
back.setText("<");
|
Resources activityRes = cordova.getActivity().getResources();
|
||||||
|
int backResId = activityRes.getIdentifier("ic_action_previous_item", "drawable", cordova.getActivity().getPackageName());
|
||||||
|
Drawable backIcon = activityRes.getDrawable(backResId);
|
||||||
|
if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN)
|
||||||
|
{
|
||||||
|
back.setBackgroundDrawable(backIcon);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
back.setBackground(backIcon);
|
||||||
|
}
|
||||||
|
|
||||||
back.setOnClickListener(new View.OnClickListener() {
|
back.setOnClickListener(new View.OnClickListener() {
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
goBack();
|
goBack();
|
||||||
@@ -486,7 +532,16 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
forward.setLayoutParams(forwardLayoutParams);
|
forward.setLayoutParams(forwardLayoutParams);
|
||||||
forward.setContentDescription("Forward Button");
|
forward.setContentDescription("Forward Button");
|
||||||
forward.setId(3);
|
forward.setId(3);
|
||||||
forward.setText(">");
|
int fwdResId = activityRes.getIdentifier("ic_action_next_item", "drawable", cordova.getActivity().getPackageName());
|
||||||
|
Drawable fwdIcon = activityRes.getDrawable(fwdResId);
|
||||||
|
if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN)
|
||||||
|
{
|
||||||
|
forward.setBackgroundDrawable(fwdIcon);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
forward.setBackground(fwdIcon);
|
||||||
|
}
|
||||||
forward.setOnClickListener(new View.OnClickListener() {
|
forward.setOnClickListener(new View.OnClickListener() {
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
goForward();
|
goForward();
|
||||||
@@ -516,14 +571,23 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Close button
|
// Close/Done button
|
||||||
Button close = new Button(cordova.getActivity());
|
Button close = new Button(cordova.getActivity());
|
||||||
RelativeLayout.LayoutParams closeLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
|
RelativeLayout.LayoutParams closeLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
|
||||||
closeLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
|
closeLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
|
||||||
close.setLayoutParams(closeLayoutParams);
|
close.setLayoutParams(closeLayoutParams);
|
||||||
forward.setContentDescription("Close Button");
|
forward.setContentDescription("Close Button");
|
||||||
close.setId(5);
|
close.setId(5);
|
||||||
close.setText(buttonLabel);
|
int closeResId = activityRes.getIdentifier("ic_action_remove", "drawable", cordova.getActivity().getPackageName());
|
||||||
|
Drawable closeIcon = activityRes.getDrawable(closeResId);
|
||||||
|
if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN)
|
||||||
|
{
|
||||||
|
close.setBackgroundDrawable(closeIcon);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
close.setBackground(closeIcon);
|
||||||
|
}
|
||||||
close.setOnClickListener(new View.OnClickListener() {
|
close.setOnClickListener(new View.OnClickListener() {
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
closeDialog();
|
closeDialog();
|
||||||
@@ -598,7 +662,7 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
// the goal of openhidden is to load the url and not display it
|
// the goal of openhidden is to load the url and not display it
|
||||||
// Show() needs to be called to cause the URL to be loaded
|
// Show() needs to be called to cause the URL to be loaded
|
||||||
if(openWindowHidden) {
|
if(openWindowHidden) {
|
||||||
dialog.hide();
|
dialog.hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -631,8 +695,6 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The webview client receives notifications about appView
|
* The webview client receives notifications about appView
|
||||||
@@ -763,7 +825,6 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
} catch (JSONException ex) {
|
} catch (JSONException ex) {
|
||||||
Log.d(LOG_TAG, "Should never happen");
|
Log.d(LOG_TAG, "Should never happen");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,21 @@
|
|||||||
|
/*
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
*/
|
||||||
package org.apache.cordova.inappbrowser;
|
package org.apache.cordova.inappbrowser;
|
||||||
|
|
||||||
import org.apache.cordova.CordovaWebView;
|
import org.apache.cordova.CordovaWebView;
|
||||||
|
|||||||
@@ -19,9 +19,8 @@
|
|||||||
package org.apache.cordova.inappbrowser;
|
package org.apache.cordova.inappbrowser;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Dialog;
|
import org.apache.cordova.inappbrowser.InAppBrowserDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
@@ -55,10 +54,13 @@ import org.apache.cordova.CordovaArgs;
|
|||||||
import org.apache.cordova.CordovaPlugin;
|
import org.apache.cordova.CordovaPlugin;
|
||||||
import org.apache.cordova.CordovaWebView;
|
import org.apache.cordova.CordovaWebView;
|
||||||
import org.apache.cordova.LOG;
|
import org.apache.cordova.LOG;
|
||||||
|
import org.apache.cordova.PluginManager;
|
||||||
import org.apache.cordova.PluginResult;
|
import org.apache.cordova.PluginResult;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
@@ -76,17 +78,15 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
private static final String LOAD_START_EVENT = "loadstart";
|
private static final String LOAD_START_EVENT = "loadstart";
|
||||||
private static final String LOAD_STOP_EVENT = "loadstop";
|
private static final String LOAD_STOP_EVENT = "loadstop";
|
||||||
private static final String LOAD_ERROR_EVENT = "loaderror";
|
private static final String LOAD_ERROR_EVENT = "loaderror";
|
||||||
private static final String CLOSE_BUTTON_CAPTION = "closebuttoncaption";
|
|
||||||
private static final String CLEAR_ALL_CACHE = "clearcache";
|
private static final String CLEAR_ALL_CACHE = "clearcache";
|
||||||
private static final String CLEAR_SESSION_CACHE = "clearsessioncache";
|
private static final String CLEAR_SESSION_CACHE = "clearsessioncache";
|
||||||
|
|
||||||
private Dialog dialog;
|
private InAppBrowserDialog dialog;
|
||||||
private WebView inAppWebView;
|
private WebView inAppWebView;
|
||||||
private EditText edittext;
|
private EditText edittext;
|
||||||
private CallbackContext callbackContext;
|
private CallbackContext callbackContext;
|
||||||
private boolean showLocationBar = true;
|
private boolean showLocationBar = true;
|
||||||
private boolean openWindowHidden = false;
|
private boolean openWindowHidden = false;
|
||||||
private String buttonLabel = "Done";
|
|
||||||
private boolean clearAllCache= false;
|
private boolean clearAllCache= false;
|
||||||
private boolean clearSessionCache=false;
|
private boolean clearSessionCache=false;
|
||||||
|
|
||||||
@@ -118,24 +118,55 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
// SELF
|
// SELF
|
||||||
if (SELF.equals(target)) {
|
if (SELF.equals(target)) {
|
||||||
Log.d(LOG_TAG, "in self");
|
Log.d(LOG_TAG, "in self");
|
||||||
|
/* This code exists for compatibility between 3.x and 4.x versions of Cordova.
|
||||||
|
* Previously the Config class had a static method, isUrlWhitelisted(). That
|
||||||
|
* responsibility has been moved to the plugins, with an aggregating method in
|
||||||
|
* PluginManager.
|
||||||
|
*/
|
||||||
|
Boolean shouldAllowNavigation = null;
|
||||||
|
if (url.startsWith("javascript:")) {
|
||||||
|
shouldAllowNavigation = true;
|
||||||
|
}
|
||||||
|
if (shouldAllowNavigation == null) {
|
||||||
|
try {
|
||||||
|
Method iuw = Config.class.getMethod("isUrlWhiteListed", String.class);
|
||||||
|
shouldAllowNavigation = (Boolean)iuw.invoke(null, url);
|
||||||
|
} catch (NoSuchMethodException e) {
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
} catch (InvocationTargetException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (shouldAllowNavigation == null) {
|
||||||
|
try {
|
||||||
|
Method gpm = webView.getClass().getMethod("getPluginManager");
|
||||||
|
PluginManager pm = (PluginManager)gpm.invoke(webView);
|
||||||
|
Method san = pm.getClass().getMethod("shouldAllowNavigation", String.class);
|
||||||
|
shouldAllowNavigation = (Boolean)san.invoke(pm, url);
|
||||||
|
} catch (NoSuchMethodException e) {
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
} catch (InvocationTargetException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
// load in webview
|
// load in webview
|
||||||
if (url.startsWith("file://") || url.startsWith("javascript:")
|
if (Boolean.TRUE.equals(shouldAllowNavigation)) {
|
||||||
|| Config.isUrlWhiteListed(url)) {
|
Log.d(LOG_TAG, "loading in webview");
|
||||||
webView.loadUrl(url);
|
webView.loadUrl(url);
|
||||||
}
|
}
|
||||||
//Load the dialer
|
//Load the dialer
|
||||||
else if (url.startsWith(WebView.SCHEME_TEL))
|
else if (url.startsWith(WebView.SCHEME_TEL))
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
Log.d(LOG_TAG, "loading in dialer");
|
||||||
Intent intent = new Intent(Intent.ACTION_DIAL);
|
Intent intent = new Intent(Intent.ACTION_DIAL);
|
||||||
intent.setData(Uri.parse(url));
|
intent.setData(Uri.parse(url));
|
||||||
cordova.getActivity().startActivity(intent);
|
cordova.getActivity().startActivity(intent);
|
||||||
} catch (android.content.ActivityNotFoundException e) {
|
} catch (android.content.ActivityNotFoundException e) {
|
||||||
LOG.e(LOG_TAG, "Error dialing " + url + ": " + e.toString());
|
LOG.e(LOG_TAG, "Error dialing " + url + ": " + e.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// load in InAppBrowser
|
// load in InAppBrowser
|
||||||
else {
|
else {
|
||||||
|
Log.d(LOG_TAG, "loading in InAppBrowser");
|
||||||
result = showWebPage(url, features);
|
result = showWebPage(url, features);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -285,12 +316,8 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
option = new StringTokenizer(features.nextToken(), "=");
|
option = new StringTokenizer(features.nextToken(), "=");
|
||||||
if (option.hasMoreElements()) {
|
if (option.hasMoreElements()) {
|
||||||
String key = option.nextToken();
|
String key = option.nextToken();
|
||||||
if (key.equalsIgnoreCase(CLOSE_BUTTON_CAPTION)) {
|
Boolean value = option.nextToken().equals("no") ? Boolean.FALSE : Boolean.TRUE;
|
||||||
this.buttonLabel = option.nextToken();
|
map.put(key, value);
|
||||||
} else {
|
|
||||||
Boolean value = option.nextToken().equals("no") ? Boolean.FALSE : Boolean.TRUE;
|
|
||||||
map.put(key, value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return map;
|
return map;
|
||||||
@@ -337,12 +364,21 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
this.cordova.getActivity().runOnUiThread(new Runnable() {
|
this.cordova.getActivity().runOnUiThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
childView.loadUrl("about:blank");
|
childView.setWebViewClient(new WebViewClient() {
|
||||||
|
// NB: wait for about:blank before dismissing
|
||||||
|
public void onPageFinished(WebView view, String url) {
|
||||||
if (dialog != null) {
|
if (dialog != null) {
|
||||||
dialog.dismiss();
|
dialog.dismiss();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
// NB: From SDK 19: "If you call methods on WebView from any thread
|
||||||
|
// other than your app's UI thread, it can cause unexpected results."
|
||||||
|
// http://developer.android.com/guide/webapps/migrating.html#Threads
|
||||||
|
childView.loadUrl("about:blank");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
JSONObject obj = new JSONObject();
|
JSONObject obj = new JSONObject();
|
||||||
obj.put("type", EXIT_EVENT);
|
obj.put("type", EXIT_EVENT);
|
||||||
@@ -350,7 +386,6 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
} catch (JSONException ex) {
|
} catch (JSONException ex) {
|
||||||
Log.d(LOG_TAG, "Should never happen");
|
Log.d(LOG_TAG, "Should never happen");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -398,6 +433,10 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
return this.showLocationBar;
|
return this.showLocationBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private InAppBrowser getInAppBrowser(){
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Display a new browser with the specified URL.
|
* Display a new browser with the specified URL.
|
||||||
*
|
*
|
||||||
@@ -446,17 +485,14 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("NewApi")
|
||||||
public void run() {
|
public void run() {
|
||||||
// Let's create the main dialog
|
// Let's create the main dialog
|
||||||
dialog = new Dialog(cordova.getActivity(), android.R.style.Theme_NoTitleBar);
|
dialog = new InAppBrowserDialog(cordova.getActivity(), android.R.style.Theme_NoTitleBar);
|
||||||
dialog.getWindow().getAttributes().windowAnimations = android.R.style.Animation_Dialog;
|
dialog.getWindow().getAttributes().windowAnimations = android.R.style.Animation_Dialog;
|
||||||
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||||
dialog.setCancelable(true);
|
dialog.setCancelable(true);
|
||||||
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
|
dialog.setInAppBroswer(getInAppBrowser());
|
||||||
public void onDismiss(DialogInterface dialog) {
|
|
||||||
closeDialog();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Main container layout
|
// Main container layout
|
||||||
LinearLayout main = new LinearLayout(cordova.getActivity());
|
LinearLayout main = new LinearLayout(cordova.getActivity());
|
||||||
@@ -485,9 +521,6 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
back.setLayoutParams(backLayoutParams);
|
back.setLayoutParams(backLayoutParams);
|
||||||
back.setContentDescription("Back Button");
|
back.setContentDescription("Back Button");
|
||||||
back.setId(2);
|
back.setId(2);
|
||||||
/*
|
|
||||||
back.setText("<");
|
|
||||||
*/
|
|
||||||
Resources activityRes = cordova.getActivity().getResources();
|
Resources activityRes = cordova.getActivity().getResources();
|
||||||
int backResId = activityRes.getIdentifier("ic_action_previous_item", "drawable", cordova.getActivity().getPackageName());
|
int backResId = activityRes.getIdentifier("ic_action_previous_item", "drawable", cordova.getActivity().getPackageName());
|
||||||
Drawable backIcon = activityRes.getDrawable(backResId);
|
Drawable backIcon = activityRes.getDrawable(backResId);
|
||||||
@@ -512,7 +545,6 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
forward.setLayoutParams(forwardLayoutParams);
|
forward.setLayoutParams(forwardLayoutParams);
|
||||||
forward.setContentDescription("Forward Button");
|
forward.setContentDescription("Forward Button");
|
||||||
forward.setId(3);
|
forward.setId(3);
|
||||||
//forward.setText(">");
|
|
||||||
int fwdResId = activityRes.getIdentifier("ic_action_next_item", "drawable", cordova.getActivity().getPackageName());
|
int fwdResId = activityRes.getIdentifier("ic_action_next_item", "drawable", cordova.getActivity().getPackageName());
|
||||||
Drawable fwdIcon = activityRes.getDrawable(fwdResId);
|
Drawable fwdIcon = activityRes.getDrawable(fwdResId);
|
||||||
if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN)
|
if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN)
|
||||||
@@ -552,14 +584,13 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Close button
|
// Close/Done button
|
||||||
Button close = new Button(cordova.getActivity());
|
Button close = new Button(cordova.getActivity());
|
||||||
RelativeLayout.LayoutParams closeLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
|
RelativeLayout.LayoutParams closeLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
|
||||||
closeLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
|
closeLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
|
||||||
close.setLayoutParams(closeLayoutParams);
|
close.setLayoutParams(closeLayoutParams);
|
||||||
forward.setContentDescription("Close Button");
|
forward.setContentDescription("Close Button");
|
||||||
close.setId(5);
|
close.setId(5);
|
||||||
//close.setText(buttonLabel);
|
|
||||||
int closeResId = activityRes.getIdentifier("ic_action_remove", "drawable", cordova.getActivity().getPackageName());
|
int closeResId = activityRes.getIdentifier("ic_action_remove", "drawable", cordova.getActivity().getPackageName());
|
||||||
Drawable closeIcon = activityRes.getDrawable(closeResId);
|
Drawable closeIcon = activityRes.getDrawable(closeResId);
|
||||||
if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN)
|
if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN)
|
||||||
@@ -640,7 +671,7 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
// the goal of openhidden is to load the url and not display it
|
// the goal of openhidden is to load the url and not display it
|
||||||
// Show() needs to be called to cause the URL to be loaded
|
// Show() needs to be called to cause the URL to be loaded
|
||||||
if(openWindowHidden) {
|
if(openWindowHidden) {
|
||||||
dialog.hide();
|
dialog.hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -673,8 +704,6 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The webview client receives notifications about appView
|
* The webview client receives notifications about appView
|
||||||
@@ -805,7 +834,6 @@ public class InAppBrowser extends CordovaPlugin {
|
|||||||
} catch (JSONException ex) {
|
} catch (JSONException ex) {
|
||||||
Log.d(LOG_TAG, "Should never happen");
|
Log.d(LOG_TAG, "Should never happen");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.cordova.inappbrowser;
|
||||||
|
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.app.Dialog;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Oliver on 22/11/2013.
|
||||||
|
*/
|
||||||
|
public class InAppBrowserDialog extends Dialog {
|
||||||
|
Context context;
|
||||||
|
InAppBrowser inAppBrowser = null;
|
||||||
|
|
||||||
|
public InAppBrowserDialog(Context context, int theme) {
|
||||||
|
super(context, theme);
|
||||||
|
this.context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInAppBroswer(InAppBrowser browser) {
|
||||||
|
this.inAppBrowser = browser;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onBackPressed () {
|
||||||
|
if (this.inAppBrowser == null) {
|
||||||
|
this.dismiss();
|
||||||
|
} else {
|
||||||
|
// better to go through the in inAppBrowser
|
||||||
|
// because it does a clean up
|
||||||
|
this.inAppBrowser.closeDialog();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,3 +1,21 @@
|
|||||||
|
/*
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
*/
|
||||||
package org.apache.cordova.inappbrowser;
|
package org.apache.cordova.inappbrowser;
|
||||||
|
|
||||||
import org.apache.cordova.CordovaWebView;
|
import org.apache.cordova.CordovaWebView;
|
||||||
|
|||||||
@@ -1,3 +1,21 @@
|
|||||||
|
<!---
|
||||||
|
license: Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
# BlackBerry 10 In-App-Browser Plugin
|
# BlackBerry 10 In-App-Browser Plugin
|
||||||
|
|
||||||
The in app browser functionality is entirely contained within common js. There is no native implementation required.
|
The in app browser functionality is entirely contained within common js. There is no native implementation required.
|
||||||
|
|||||||
@@ -0,0 +1,191 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
// https://developer.mozilla.org/en-US/docs/WebAPI/Browser
|
||||||
|
|
||||||
|
var cordova = require('cordova'),
|
||||||
|
channel = require('cordova/channel'),
|
||||||
|
modulemapper = require('cordova/modulemapper');
|
||||||
|
|
||||||
|
var origOpenFunc = modulemapper.getOriginalSymbol(window, 'window.open');
|
||||||
|
var browserWrap;
|
||||||
|
|
||||||
|
var IABExecs = {
|
||||||
|
|
||||||
|
close: function (win, lose) {
|
||||||
|
if (browserWrap) {
|
||||||
|
browserWrap.parentNode.removeChild(browserWrap);
|
||||||
|
browserWrap = null;
|
||||||
|
if (typeof(win) == "function") win({type:'exit'});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Reveal browser if opened hidden
|
||||||
|
*/
|
||||||
|
show: function (win, lose) {
|
||||||
|
console.error('[FirefoxOS] show not implemented');
|
||||||
|
},
|
||||||
|
|
||||||
|
open: function (win, lose, args) {
|
||||||
|
var strUrl = args[0],
|
||||||
|
target = args[1],
|
||||||
|
features_string = args[2] || "location=yes", //location=yes is default
|
||||||
|
features = {},
|
||||||
|
url,
|
||||||
|
elem;
|
||||||
|
|
||||||
|
var features_list = features_string.split(',');
|
||||||
|
features_list.forEach(function(feature) {
|
||||||
|
var tup = feature.split('=');
|
||||||
|
if (tup[1] == 'yes') {
|
||||||
|
tup[1] = true;
|
||||||
|
} else if (tup[1] == 'no') {
|
||||||
|
tup[1] = false;
|
||||||
|
} else {
|
||||||
|
var number = parseInt(tup[1]);
|
||||||
|
if (!isNaN(number)) {
|
||||||
|
tup[1] = number;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
features[tup[0]] = tup[1];
|
||||||
|
});
|
||||||
|
|
||||||
|
function updateIframeSizeNoLocation() {
|
||||||
|
browserWrap.style.width = window.innerWidth + 'px';
|
||||||
|
browserWrap.style.height = window.innerHeight + 'px';
|
||||||
|
browserWrap.style.zIndex = '999999999';
|
||||||
|
browserWrap.browser.style.height = (window.innerHeight - 60) + 'px';
|
||||||
|
browserWrap.browser.style.width = browserWrap.style.width;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (target === '_system') {
|
||||||
|
origOpenFunc.apply(window, [strUrl, '_blank']);
|
||||||
|
} else if (target === '_blank') {
|
||||||
|
var browserElem = document.createElement('iframe');
|
||||||
|
browserElem.setAttribute('mozbrowser', true);
|
||||||
|
// make this loaded in its own child process
|
||||||
|
browserElem.setAttribute('remote', true);
|
||||||
|
browserElem.setAttribute('src', strUrl);
|
||||||
|
if (browserWrap) {
|
||||||
|
document.body.removeChild(browserWrap);
|
||||||
|
}
|
||||||
|
browserWrap = document.createElement('div');
|
||||||
|
// assign browser element to browserWrap for future reference
|
||||||
|
browserWrap.browser = browserElem;
|
||||||
|
|
||||||
|
browserWrap.classList.add('inAppBrowserWrap');
|
||||||
|
// position fixed so that it works even when page is scrolled
|
||||||
|
browserWrap.style.position = 'fixed';
|
||||||
|
browserElem.style.position = 'absolute';
|
||||||
|
browserElem.style.border = 0;
|
||||||
|
browserElem.style.top = '60px';
|
||||||
|
browserElem.style.left = '0px';
|
||||||
|
updateIframeSizeNoLocation();
|
||||||
|
|
||||||
|
var menu = document.createElement('menu');
|
||||||
|
menu.setAttribute('type', 'toolbar');
|
||||||
|
var close = document.createElement('li');
|
||||||
|
var back = document.createElement('li');
|
||||||
|
var forward = document.createElement('li');
|
||||||
|
|
||||||
|
close.appendChild(document.createTextNode('×'));
|
||||||
|
back.appendChild(document.createTextNode('<'));
|
||||||
|
forward.appendChild(document.createTextNode('>'));
|
||||||
|
|
||||||
|
close.classList.add('inAppBrowserClose');
|
||||||
|
back.classList.add('inAppBrowserBack');
|
||||||
|
forward.classList.add('inAppBrowserForward');
|
||||||
|
|
||||||
|
function checkForwardBackward() {
|
||||||
|
var backReq = browserElem.getCanGoBack();
|
||||||
|
backReq.onsuccess = function() {
|
||||||
|
if (this.result) {
|
||||||
|
back.classList.remove('disabled');
|
||||||
|
} else {
|
||||||
|
back.classList.add('disabled');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var forwardReq = browserElem.getCanGoForward();
|
||||||
|
forwardReq.onsuccess = function() {
|
||||||
|
if (this.result) {
|
||||||
|
forward.classList.remove('disabled');
|
||||||
|
} else {
|
||||||
|
forward.classList.add('disabled');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
browserElem.addEventListener('mozbrowserloadend', checkForwardBackward);
|
||||||
|
|
||||||
|
close.addEventListener('click', function () {
|
||||||
|
setTimeout(function () {
|
||||||
|
IABExecs.close(win, lose);
|
||||||
|
}, 0);
|
||||||
|
}, false);
|
||||||
|
|
||||||
|
back.addEventListener('click', function () {
|
||||||
|
browserElem.goBack();
|
||||||
|
}, false);
|
||||||
|
|
||||||
|
forward.addEventListener('click', function () {
|
||||||
|
browserElem.goForward();
|
||||||
|
}, false);
|
||||||
|
|
||||||
|
menu.appendChild(back);
|
||||||
|
menu.appendChild(forward);
|
||||||
|
menu.appendChild(close);
|
||||||
|
|
||||||
|
browserWrap.appendChild(menu);
|
||||||
|
browserWrap.appendChild(browserElem);
|
||||||
|
document.body.appendChild(browserWrap);
|
||||||
|
|
||||||
|
//we use mozbrowserlocationchange instead of mozbrowserloadstart to get the url
|
||||||
|
browserElem.addEventListener('mozbrowserlocationchange', function(e){
|
||||||
|
win({
|
||||||
|
type:'loadstart',
|
||||||
|
url : e.detail
|
||||||
|
})
|
||||||
|
}, false);
|
||||||
|
browserElem.addEventListener('mozbrowserloadend', function(e){
|
||||||
|
win({type:'loadstop'})
|
||||||
|
}, false);
|
||||||
|
browserElem.addEventListener('mozbrowsererror', function(e){
|
||||||
|
win({type:'loaderror'})
|
||||||
|
}, false);
|
||||||
|
browserElem.addEventListener('mozbrowserclose', function(e){
|
||||||
|
win({type:'exit'})
|
||||||
|
}, false);
|
||||||
|
} else {
|
||||||
|
window.location = strUrl;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
injectScriptCode: function (code, bCB) {
|
||||||
|
console.error('[FirefoxOS] injectScriptCode not implemented');
|
||||||
|
},
|
||||||
|
injectScriptFile: function (file, bCB) {
|
||||||
|
console.error('[FirefoxOS] injectScriptFile not implemented');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = IABExecs;
|
||||||
|
|
||||||
|
require('cordova/exec/proxy').add('InAppBrowser', module.exports);
|
||||||
@@ -45,6 +45,8 @@
|
|||||||
@property (nonatomic, assign) BOOL toolbar;
|
@property (nonatomic, assign) BOOL toolbar;
|
||||||
@property (nonatomic, copy) NSString* closebuttoncaption;
|
@property (nonatomic, copy) NSString* closebuttoncaption;
|
||||||
@property (nonatomic, copy) NSString* toolbarposition;
|
@property (nonatomic, copy) NSString* toolbarposition;
|
||||||
|
@property (nonatomic, assign) BOOL clearcache;
|
||||||
|
@property (nonatomic, assign) BOOL clearsessioncache;
|
||||||
|
|
||||||
@property (nonatomic, copy) NSString* presentationstyle;
|
@property (nonatomic, copy) NSString* presentationstyle;
|
||||||
@property (nonatomic, copy) NSString* transitionstyle;
|
@property (nonatomic, copy) NSString* transitionstyle;
|
||||||
@@ -61,7 +63,7 @@
|
|||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface CDVInAppBrowserViewController : UIViewController <UIWebViewDelegate>{
|
@interface CDVInAppBrowserViewController : UIViewController <UIWebViewDelegate, CDVScreenOrientationDelegate>{
|
||||||
@private
|
@private
|
||||||
NSString* _userAgent;
|
NSString* _userAgent;
|
||||||
NSString* _prevUserAgent;
|
NSString* _prevUserAgent;
|
||||||
@@ -90,4 +92,11 @@
|
|||||||
|
|
||||||
- (id)initWithUserAgent:(NSString*)userAgent prevUserAgent:(NSString*)prevUserAgent browserOptions: (CDVInAppBrowserOptions*) browserOptions;
|
- (id)initWithUserAgent:(NSString*)userAgent prevUserAgent:(NSString*)prevUserAgent browserOptions: (CDVInAppBrowserOptions*) browserOptions;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@interface CDVInAppBrowserNavigationController : UINavigationController
|
||||||
|
|
||||||
|
@property (nonatomic, weak) id <CDVScreenOrientationDelegate> orientationDelegate;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|||||||
+92
-30
@@ -20,7 +20,6 @@
|
|||||||
#import "CDVInAppBrowser.h"
|
#import "CDVInAppBrowser.h"
|
||||||
#import <Cordova/CDVPluginResult.h>
|
#import <Cordova/CDVPluginResult.h>
|
||||||
#import <Cordova/CDVUserAgentUtil.h>
|
#import <Cordova/CDVUserAgentUtil.h>
|
||||||
#import <Cordova/CDVJSON.h>
|
|
||||||
|
|
||||||
#define kInAppBrowserTargetSelf @"_self"
|
#define kInAppBrowserTargetSelf @"_self"
|
||||||
#define kInAppBrowserTargetSystem @"_system"
|
#define kInAppBrowserTargetSystem @"_system"
|
||||||
@@ -73,7 +72,7 @@
|
|||||||
if ([[url host] isEqualToString:@"itunes.apple.com"]) {
|
if ([[url host] isEqualToString:@"itunes.apple.com"]) {
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,7 +89,7 @@
|
|||||||
if (url != nil) {
|
if (url != nil) {
|
||||||
NSURL* baseUrl = [self.webView.request URL];
|
NSURL* baseUrl = [self.webView.request URL];
|
||||||
NSURL* absoluteUrl = [[NSURL URLWithString:url relativeToURL:baseUrl] absoluteURL];
|
NSURL* absoluteUrl = [[NSURL URLWithString:url relativeToURL:baseUrl] absoluteURL];
|
||||||
|
|
||||||
if ([self isSystemUrl:absoluteUrl]) {
|
if ([self isSystemUrl:absoluteUrl]) {
|
||||||
target = kInAppBrowserTargetSystem;
|
target = kInAppBrowserTargetSystem;
|
||||||
}
|
}
|
||||||
@@ -115,6 +114,29 @@
|
|||||||
- (void)openInInAppBrowser:(NSURL*)url withOptions:(NSString*)options
|
- (void)openInInAppBrowser:(NSURL*)url withOptions:(NSString*)options
|
||||||
{
|
{
|
||||||
CDVInAppBrowserOptions* browserOptions = [CDVInAppBrowserOptions parseOptions:options];
|
CDVInAppBrowserOptions* browserOptions = [CDVInAppBrowserOptions parseOptions:options];
|
||||||
|
|
||||||
|
if (browserOptions.clearcache) {
|
||||||
|
NSHTTPCookie *cookie;
|
||||||
|
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
|
||||||
|
for (cookie in [storage cookies])
|
||||||
|
{
|
||||||
|
if (![cookie.domain isEqual: @".^filecookies^"]) {
|
||||||
|
[storage deleteCookie:cookie];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (browserOptions.clearsessioncache) {
|
||||||
|
NSHTTPCookie *cookie;
|
||||||
|
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
|
||||||
|
for (cookie in [storage cookies])
|
||||||
|
{
|
||||||
|
if (![cookie.domain isEqual: @".^filecookies^"] && cookie.isSessionOnly) {
|
||||||
|
[storage deleteCookie:cookie];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (self.inAppBrowserViewController == nil) {
|
if (self.inAppBrowserViewController == nil) {
|
||||||
NSString* originalUA = [CDVUserAgentUtil originalUserAgent];
|
NSString* originalUA = [CDVUserAgentUtil originalUserAgent];
|
||||||
self.inAppBrowserViewController = [[CDVInAppBrowserViewController alloc] initWithUserAgent:originalUA prevUserAgent:[self.commandDelegate userAgent] browserOptions: browserOptions];
|
self.inAppBrowserViewController = [[CDVInAppBrowserViewController alloc] initWithUserAgent:originalUA prevUserAgent:[self.commandDelegate userAgent] browserOptions: browserOptions];
|
||||||
@@ -164,7 +186,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// UIWebView options
|
// UIWebView options
|
||||||
self.inAppBrowserViewController.webView.scalesPageToFit = browserOptions.enableviewportscale;
|
self.inAppBrowserViewController.webView.scalesPageToFit = browserOptions.enableviewportscale;
|
||||||
self.inAppBrowserViewController.webView.mediaPlaybackRequiresUserAction = browserOptions.mediaplaybackrequiresuseraction;
|
self.inAppBrowserViewController.webView.mediaPlaybackRequiresUserAction = browserOptions.mediaplaybackrequiresuseraction;
|
||||||
@@ -173,7 +195,7 @@
|
|||||||
self.inAppBrowserViewController.webView.keyboardDisplayRequiresUserAction = browserOptions.keyboarddisplayrequiresuseraction;
|
self.inAppBrowserViewController.webView.keyboardDisplayRequiresUserAction = browserOptions.keyboarddisplayrequiresuseraction;
|
||||||
self.inAppBrowserViewController.webView.suppressesIncrementalRendering = browserOptions.suppressesincrementalrendering;
|
self.inAppBrowserViewController.webView.suppressesIncrementalRendering = browserOptions.suppressesincrementalrendering;
|
||||||
}
|
}
|
||||||
|
|
||||||
[self.inAppBrowserViewController navigateTo:url];
|
[self.inAppBrowserViewController navigateTo:url];
|
||||||
if (!browserOptions.hidden) {
|
if (!browserOptions.hidden) {
|
||||||
[self show:nil];
|
[self show:nil];
|
||||||
@@ -190,16 +212,17 @@
|
|||||||
NSLog(@"Tried to show IAB while already shown");
|
NSLog(@"Tried to show IAB while already shown");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_previousStatusBarStyle = [UIApplication sharedApplication].statusBarStyle;
|
_previousStatusBarStyle = [UIApplication sharedApplication].statusBarStyle;
|
||||||
|
|
||||||
UINavigationController* nav = [[UINavigationController alloc]
|
CDVInAppBrowserNavigationController* nav = [[CDVInAppBrowserNavigationController alloc]
|
||||||
initWithRootViewController:self.inAppBrowserViewController];
|
initWithRootViewController:self.inAppBrowserViewController];
|
||||||
|
nav.orientationDelegate = self.inAppBrowserViewController;
|
||||||
nav.navigationBarHidden = YES;
|
nav.navigationBarHidden = YES;
|
||||||
// Run later to avoid the "took a long time" log message.
|
// Run later to avoid the "took a long time" log message.
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
if (self.inAppBrowserViewController != nil) {
|
if (self.inAppBrowserViewController != nil) {
|
||||||
[self.viewController presentModalViewController:nav animated:YES];
|
[self.viewController presentViewController:nav animated:YES completion:nil];
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -241,7 +264,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (jsWrapper != nil) {
|
if (jsWrapper != nil) {
|
||||||
NSString* sourceArrayString = [@[source] JSONString];
|
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:@[source] options:0 error:nil];
|
||||||
|
NSString* sourceArrayString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
||||||
if (sourceArrayString) {
|
if (sourceArrayString) {
|
||||||
NSString* sourceString = [sourceArrayString substringWithRange:NSMakeRange(1, [sourceArrayString length] - 2)];
|
NSString* sourceString = [sourceArrayString substringWithRange:NSMakeRange(1, [sourceArrayString length] - 2)];
|
||||||
NSString* jsToInject = [NSString stringWithFormat:jsWrapper, sourceString];
|
NSString* jsToInject = [NSString stringWithFormat:jsWrapper, sourceString];
|
||||||
@@ -395,7 +419,7 @@
|
|||||||
if (self.callbackId != nil) {
|
if (self.callbackId != nil) {
|
||||||
NSString* url = [self.inAppBrowserViewController.currentURL absoluteString];
|
NSString* url = [self.inAppBrowserViewController.currentURL absoluteString];
|
||||||
CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR
|
CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR
|
||||||
messageAsDictionary:@{@"type":@"loaderror", @"url":url, @"code": [NSNumber numberWithInt:error.code], @"message": error.localizedDescription}];
|
messageAsDictionary:@{@"type":@"loaderror", @"url":url, @"code": [NSNumber numberWithInteger:error.code], @"message": error.localizedDescription}];
|
||||||
[pluginResult setKeepCallback:[NSNumber numberWithBool:YES]];
|
[pluginResult setKeepCallback:[NSNumber numberWithBool:YES]];
|
||||||
|
|
||||||
[self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
|
[self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
|
||||||
@@ -415,12 +439,12 @@
|
|||||||
// Don't recycle the ViewController since it may be consuming a lot of memory.
|
// Don't recycle the ViewController since it may be consuming a lot of memory.
|
||||||
// Also - this is required for the PDF/User-Agent bug work-around.
|
// Also - this is required for the PDF/User-Agent bug work-around.
|
||||||
self.inAppBrowserViewController = nil;
|
self.inAppBrowserViewController = nil;
|
||||||
|
|
||||||
_previousStatusBarStyle = -1;
|
|
||||||
|
|
||||||
if (IsAtLeastiOSVersion(@"7.0")) {
|
if (IsAtLeastiOSVersion(@"7.0")) {
|
||||||
[[UIApplication sharedApplication] setStatusBarStyle:_previousStatusBarStyle];
|
[[UIApplication sharedApplication] setStatusBarStyle:_previousStatusBarStyle];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_previousStatusBarStyle = -1; // this value was reset before reapplying it. caused statusbar to stay black on ios7
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
@@ -453,7 +477,7 @@
|
|||||||
BOOL toolbarIsAtBottom = ![_browserOptions.toolbarposition isEqualToString:kInAppBrowserToolbarBarPositionTop];
|
BOOL toolbarIsAtBottom = ![_browserOptions.toolbarposition isEqualToString:kInAppBrowserToolbarBarPositionTop];
|
||||||
webViewBounds.size.height -= _browserOptions.location ? FOOTER_HEIGHT : TOOLBAR_HEIGHT;
|
webViewBounds.size.height -= _browserOptions.location ? FOOTER_HEIGHT : TOOLBAR_HEIGHT;
|
||||||
self.webView = [[UIWebView alloc] initWithFrame:webViewBounds];
|
self.webView = [[UIWebView alloc] initWithFrame:webViewBounds];
|
||||||
|
|
||||||
self.webView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
|
self.webView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
|
||||||
|
|
||||||
[self.view addSubview:self.webView];
|
[self.view addSubview:self.webView];
|
||||||
@@ -465,7 +489,6 @@
|
|||||||
self.webView.clearsContextBeforeDrawing = YES;
|
self.webView.clearsContextBeforeDrawing = YES;
|
||||||
self.webView.clipsToBounds = YES;
|
self.webView.clipsToBounds = YES;
|
||||||
self.webView.contentMode = UIViewContentModeScaleToFill;
|
self.webView.contentMode = UIViewContentModeScaleToFill;
|
||||||
self.webView.contentStretch = CGRectFromString(@"{{0, 0}, {1, 1}}");
|
|
||||||
self.webView.multipleTouchEnabled = YES;
|
self.webView.multipleTouchEnabled = YES;
|
||||||
self.webView.opaque = YES;
|
self.webView.opaque = YES;
|
||||||
self.webView.scalesPageToFit = NO;
|
self.webView.scalesPageToFit = NO;
|
||||||
@@ -478,7 +501,6 @@
|
|||||||
self.spinner.clearsContextBeforeDrawing = NO;
|
self.spinner.clearsContextBeforeDrawing = NO;
|
||||||
self.spinner.clipsToBounds = NO;
|
self.spinner.clipsToBounds = NO;
|
||||||
self.spinner.contentMode = UIViewContentModeScaleToFill;
|
self.spinner.contentMode = UIViewContentModeScaleToFill;
|
||||||
self.spinner.contentStretch = CGRectFromString(@"{{0, 0}, {1, 1}}");
|
|
||||||
self.spinner.frame = CGRectMake(454.0, 231.0, 20.0, 20.0);
|
self.spinner.frame = CGRectMake(454.0, 231.0, 20.0, 20.0);
|
||||||
self.spinner.hidden = YES;
|
self.spinner.hidden = YES;
|
||||||
self.spinner.hidesWhenStopped = YES;
|
self.spinner.hidesWhenStopped = YES;
|
||||||
@@ -497,7 +519,7 @@
|
|||||||
|
|
||||||
float toolbarY = toolbarIsAtBottom ? self.view.bounds.size.height - TOOLBAR_HEIGHT : 0.0;
|
float toolbarY = toolbarIsAtBottom ? self.view.bounds.size.height - TOOLBAR_HEIGHT : 0.0;
|
||||||
CGRect toolbarFrame = CGRectMake(0.0, toolbarY, self.view.bounds.size.width, TOOLBAR_HEIGHT);
|
CGRect toolbarFrame = CGRectMake(0.0, toolbarY, self.view.bounds.size.width, TOOLBAR_HEIGHT);
|
||||||
|
|
||||||
self.toolbar = [[UIToolbar alloc] initWithFrame:toolbarFrame];
|
self.toolbar = [[UIToolbar alloc] initWithFrame:toolbarFrame];
|
||||||
self.toolbar.alpha = 1.000;
|
self.toolbar.alpha = 1.000;
|
||||||
self.toolbar.autoresizesSubviews = YES;
|
self.toolbar.autoresizesSubviews = YES;
|
||||||
@@ -506,7 +528,6 @@
|
|||||||
self.toolbar.clearsContextBeforeDrawing = NO;
|
self.toolbar.clearsContextBeforeDrawing = NO;
|
||||||
self.toolbar.clipsToBounds = NO;
|
self.toolbar.clipsToBounds = NO;
|
||||||
self.toolbar.contentMode = UIViewContentModeScaleToFill;
|
self.toolbar.contentMode = UIViewContentModeScaleToFill;
|
||||||
self.toolbar.contentStretch = CGRectFromString(@"{{0, 0}, {1, 1}}");
|
|
||||||
self.toolbar.hidden = NO;
|
self.toolbar.hidden = NO;
|
||||||
self.toolbar.multipleTouchEnabled = NO;
|
self.toolbar.multipleTouchEnabled = NO;
|
||||||
self.toolbar.opaque = NO;
|
self.toolbar.opaque = NO;
|
||||||
@@ -514,7 +535,7 @@
|
|||||||
|
|
||||||
CGFloat labelInset = 5.0;
|
CGFloat labelInset = 5.0;
|
||||||
float locationBarY = toolbarIsAtBottom ? self.view.bounds.size.height - FOOTER_HEIGHT : self.view.bounds.size.height - LOCATIONBAR_HEIGHT;
|
float locationBarY = toolbarIsAtBottom ? self.view.bounds.size.height - FOOTER_HEIGHT : self.view.bounds.size.height - LOCATIONBAR_HEIGHT;
|
||||||
|
|
||||||
self.addressLabel = [[UILabel alloc] initWithFrame:CGRectMake(labelInset, locationBarY, self.view.bounds.size.width - labelInset, LOCATIONBAR_HEIGHT)];
|
self.addressLabel = [[UILabel alloc] initWithFrame:CGRectMake(labelInset, locationBarY, self.view.bounds.size.width - labelInset, LOCATIONBAR_HEIGHT)];
|
||||||
self.addressLabel.adjustsFontSizeToFitWidth = NO;
|
self.addressLabel.adjustsFontSizeToFitWidth = NO;
|
||||||
self.addressLabel.alpha = 1.000;
|
self.addressLabel.alpha = 1.000;
|
||||||
@@ -525,11 +546,16 @@
|
|||||||
self.addressLabel.clearsContextBeforeDrawing = YES;
|
self.addressLabel.clearsContextBeforeDrawing = YES;
|
||||||
self.addressLabel.clipsToBounds = YES;
|
self.addressLabel.clipsToBounds = YES;
|
||||||
self.addressLabel.contentMode = UIViewContentModeScaleToFill;
|
self.addressLabel.contentMode = UIViewContentModeScaleToFill;
|
||||||
self.addressLabel.contentStretch = CGRectFromString(@"{{0, 0}, {1, 1}}");
|
|
||||||
self.addressLabel.enabled = YES;
|
self.addressLabel.enabled = YES;
|
||||||
self.addressLabel.hidden = NO;
|
self.addressLabel.hidden = NO;
|
||||||
self.addressLabel.lineBreakMode = NSLineBreakByTruncatingTail;
|
self.addressLabel.lineBreakMode = NSLineBreakByTruncatingTail;
|
||||||
self.addressLabel.minimumScaleFactor = 10.000;
|
|
||||||
|
if ([self.addressLabel respondsToSelector:NSSelectorFromString(@"setMinimumScaleFactor:")]) {
|
||||||
|
[self.addressLabel setValue:@(10.0/[UIFont labelFontSize]) forKey:@"minimumScaleFactor"];
|
||||||
|
} else if ([self.addressLabel respondsToSelector:NSSelectorFromString(@"setMinimumFontSize:")]) {
|
||||||
|
[self.addressLabel setValue:@(10.0) forKey:@"minimumFontSize"];
|
||||||
|
}
|
||||||
|
|
||||||
self.addressLabel.multipleTouchEnabled = NO;
|
self.addressLabel.multipleTouchEnabled = NO;
|
||||||
self.addressLabel.numberOfLines = 1;
|
self.addressLabel.numberOfLines = 1;
|
||||||
self.addressLabel.opaque = NO;
|
self.addressLabel.opaque = NO;
|
||||||
@@ -642,7 +668,7 @@
|
|||||||
if (show) {
|
if (show) {
|
||||||
self.toolbar.hidden = NO;
|
self.toolbar.hidden = NO;
|
||||||
CGRect webViewBounds = self.view.bounds;
|
CGRect webViewBounds = self.view.bounds;
|
||||||
|
|
||||||
if (locationbarVisible) {
|
if (locationbarVisible) {
|
||||||
// locationBar at the bottom, move locationBar up
|
// locationBar at the bottom, move locationBar up
|
||||||
// put toolBar at the bottom
|
// put toolBar at the bottom
|
||||||
@@ -656,7 +682,7 @@
|
|||||||
webViewBounds.size.height -= TOOLBAR_HEIGHT;
|
webViewBounds.size.height -= TOOLBAR_HEIGHT;
|
||||||
self.toolbar.frame = toolbarFrame;
|
self.toolbar.frame = toolbarFrame;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ([toolbarPosition isEqualToString:kInAppBrowserToolbarBarPositionTop]) {
|
if ([toolbarPosition isEqualToString:kInAppBrowserToolbarBarPositionTop]) {
|
||||||
toolbarFrame.origin.y = 0;
|
toolbarFrame.origin.y = 0;
|
||||||
webViewBounds.origin.y += toolbarFrame.size.height;
|
webViewBounds.origin.y += toolbarFrame.size.height;
|
||||||
@@ -665,7 +691,7 @@
|
|||||||
toolbarFrame.origin.y = (webViewBounds.size.height + LOCATIONBAR_HEIGHT);
|
toolbarFrame.origin.y = (webViewBounds.size.height + LOCATIONBAR_HEIGHT);
|
||||||
}
|
}
|
||||||
[self setWebViewFrame:webViewBounds];
|
[self setWebViewFrame:webViewBounds];
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
self.toolbar.hidden = YES;
|
self.toolbar.hidden = YES;
|
||||||
|
|
||||||
@@ -699,7 +725,7 @@
|
|||||||
[CDVUserAgentUtil releaseLock:&_userAgentLockToken];
|
[CDVUserAgentUtil releaseLock:&_userAgentLockToken];
|
||||||
[super viewDidUnload];
|
[super viewDidUnload];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (UIStatusBarStyle)preferredStatusBarStyle
|
- (UIStatusBarStyle)preferredStatusBarStyle
|
||||||
{
|
{
|
||||||
return UIStatusBarStyleDefault;
|
return UIStatusBarStyleDefault;
|
||||||
@@ -709,7 +735,7 @@
|
|||||||
{
|
{
|
||||||
[CDVUserAgentUtil releaseLock:&_userAgentLockToken];
|
[CDVUserAgentUtil releaseLock:&_userAgentLockToken];
|
||||||
self.currentURL = nil;
|
self.currentURL = nil;
|
||||||
|
|
||||||
if ((self.navigationDelegate != nil) && [self.navigationDelegate respondsToSelector:@selector(browserExit)]) {
|
if ((self.navigationDelegate != nil) && [self.navigationDelegate respondsToSelector:@selector(browserExit)]) {
|
||||||
[self.navigationDelegate browserExit];
|
[self.navigationDelegate browserExit];
|
||||||
}
|
}
|
||||||
@@ -719,7 +745,7 @@
|
|||||||
if ([self respondsToSelector:@selector(presentingViewController)]) {
|
if ([self respondsToSelector:@selector(presentingViewController)]) {
|
||||||
[[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];
|
[[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];
|
||||||
} else {
|
} else {
|
||||||
[[self parentViewController] dismissModalViewControllerAnimated:YES];
|
[[self parentViewController] dismissViewControllerAnimated:YES completion:nil];
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -748,14 +774,14 @@
|
|||||||
{
|
{
|
||||||
[self.webView goForward];
|
[self.webView goForward];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)viewWillAppear:(BOOL)animated
|
- (void)viewWillAppear:(BOOL)animated
|
||||||
{
|
{
|
||||||
if (IsAtLeastiOSVersion(@"7.0")) {
|
if (IsAtLeastiOSVersion(@"7.0")) {
|
||||||
[[UIApplication sharedApplication] setStatusBarStyle:[self preferredStatusBarStyle]];
|
[[UIApplication sharedApplication] setStatusBarStyle:[self preferredStatusBarStyle]];
|
||||||
}
|
}
|
||||||
[self rePositionViews];
|
[self rePositionViews];
|
||||||
|
|
||||||
[super viewWillAppear:animated];
|
[super viewWillAppear:animated];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -834,7 +860,7 @@
|
|||||||
- (void)webView:(UIWebView*)theWebView didFailLoadWithError:(NSError*)error
|
- (void)webView:(UIWebView*)theWebView didFailLoadWithError:(NSError*)error
|
||||||
{
|
{
|
||||||
// log fail message, stop spinner, update back/forward
|
// log fail message, stop spinner, update back/forward
|
||||||
NSLog(@"webView:didFailLoadWithError - %i: %@", error.code, [error localizedDescription]);
|
NSLog(@"webView:didFailLoadWithError - %ld: %@", (long)error.code, [error localizedDescription]);
|
||||||
|
|
||||||
self.backButton.enabled = theWebView.canGoBack;
|
self.backButton.enabled = theWebView.canGoBack;
|
||||||
self.forwardButton.enabled = theWebView.canGoForward;
|
self.forwardButton.enabled = theWebView.canGoForward;
|
||||||
@@ -885,6 +911,8 @@
|
|||||||
self.toolbar = YES;
|
self.toolbar = YES;
|
||||||
self.closebuttoncaption = nil;
|
self.closebuttoncaption = nil;
|
||||||
self.toolbarposition = kInAppBrowserToolbarBarPositionBottom;
|
self.toolbarposition = kInAppBrowserToolbarBarPositionBottom;
|
||||||
|
self.clearcache = NO;
|
||||||
|
self.clearsessioncache = NO;
|
||||||
|
|
||||||
self.enableviewportscale = NO;
|
self.enableviewportscale = NO;
|
||||||
self.mediaplaybackrequiresuseraction = NO;
|
self.mediaplaybackrequiresuseraction = NO;
|
||||||
@@ -936,3 +964,37 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@implementation CDVInAppBrowserNavigationController : UINavigationController
|
||||||
|
|
||||||
|
#pragma mark CDVScreenOrientationDelegate
|
||||||
|
|
||||||
|
- (BOOL)shouldAutorotate
|
||||||
|
{
|
||||||
|
if ((self.orientationDelegate != nil) && [self.orientationDelegate respondsToSelector:@selector(shouldAutorotate)]) {
|
||||||
|
return [self.orientationDelegate shouldAutorotate];
|
||||||
|
}
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSUInteger)supportedInterfaceOrientations
|
||||||
|
{
|
||||||
|
if ((self.orientationDelegate != nil) && [self.orientationDelegate respondsToSelector:@selector(supportedInterfaceOrientations)]) {
|
||||||
|
return [self.orientationDelegate supportedInterfaceOrientations];
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1 << UIInterfaceOrientationPortrait;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
|
||||||
|
{
|
||||||
|
if ((self.orientationDelegate != nil) && [self.orientationDelegate respondsToSelector:@selector(shouldAutorotateToInterfaceOrientation:)]) {
|
||||||
|
return [self.orientationDelegate shouldAutorotateToInterfaceOrientation:interfaceOrientation];
|
||||||
|
}
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|||||||
@@ -21,9 +21,9 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
import QtQuick 2.0
|
import QtQuick 2.0
|
||||||
import QtWebKit 3.0
|
|
||||||
import Ubuntu.Components.Popups 0.1
|
import Ubuntu.Components.Popups 0.1
|
||||||
import Ubuntu.Components 0.1
|
import Ubuntu.Components 0.1
|
||||||
|
import com.canonical.Oxide 1.0
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
@@ -55,15 +55,38 @@ Rectangle {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
property string usContext: "oxide://main-world/2"
|
||||||
|
|
||||||
|
function executeJS(scId, code) {
|
||||||
|
var req = _view.rootFrame.sendMessage(usContext, "EXECUTE", {code: code});
|
||||||
|
|
||||||
|
req.onreply = function(response) {
|
||||||
|
var code = 'cordova.callback(' + scId + ', JSON.parse(\'' + JSON.stringify(response.result) + '\'))';
|
||||||
|
console.warn(code);
|
||||||
|
cordova.javaScriptExecNeeded(code);
|
||||||
|
console.warn("RESP:" + JSON.stringify(response));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
WebView {
|
WebView {
|
||||||
width: parent.width
|
width: parent.width
|
||||||
y: urlEntry.height
|
y: urlEntry.height
|
||||||
height: parent.height - y
|
height: parent.height - y
|
||||||
url: url1
|
url: url1
|
||||||
onLoadingChanged: {
|
id: _view
|
||||||
if (loadRequest.status) {
|
onLoadingStateChanged: {
|
||||||
root.exec("InAppBrowser", "loadFinished", [loadRequest.status])
|
root.exec("InAppBrowser", "loadFinished", [_view.loading])
|
||||||
}
|
}
|
||||||
|
context: WebContext {
|
||||||
|
id: webcontext
|
||||||
|
|
||||||
|
userScripts: [
|
||||||
|
UserScript {
|
||||||
|
context: usContext
|
||||||
|
emulateGreasemonkey: true
|
||||||
|
url: "InAppBrowser_escapeScript.js"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
oxide.addMessageHandler("EXECUTE", function(msg) {
|
||||||
|
var code = msg.args.code;
|
||||||
|
try {
|
||||||
|
msg.reply({result: eval(code)});
|
||||||
|
} catch(e) {
|
||||||
|
msg.error("Code threw exception: \"" + e + "\"");
|
||||||
|
}
|
||||||
|
});
|
||||||
+30
-31
@@ -31,7 +31,7 @@ Inappbrowser::Inappbrowser(Cordova *cordova): CPlugin(cordova), _eventCb(0) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const char code[] = "\
|
const char code[] = "\
|
||||||
var component, object; \
|
var component; \
|
||||||
function createObject() { \
|
function createObject() { \
|
||||||
component = Qt.createComponent(%1); \
|
component = Qt.createComponent(%1); \
|
||||||
if (component.status == Component.Ready) \
|
if (component.status == Component.Ready) \
|
||||||
@@ -40,67 +40,66 @@ function createObject() { \
|
|||||||
component.statusChanged.connect(finishCreation); \
|
component.statusChanged.connect(finishCreation); \
|
||||||
} \
|
} \
|
||||||
function finishCreation() { \
|
function finishCreation() { \
|
||||||
CordovaWrapper.object = component.createObject(root, \
|
CordovaWrapper.global.inappbrowser = component.createObject(root, \
|
||||||
{root: root, cordova: cordova, url1: %2}); \
|
{root: root, cordova: cordova, url1: %2}); \
|
||||||
} \
|
} \
|
||||||
createObject()";
|
createObject()";
|
||||||
|
|
||||||
const char EXIT_EVENT[] = "'exit'";
|
const char EXIT_EVENT[] = "{type: 'exit'}";
|
||||||
const char LOADSTART_EVENT[] = "'loadstart'";
|
const char LOADSTART_EVENT[] = "{type: 'loadstart'}";
|
||||||
const char LOADSTOP_EVENT[] = "'loadstop'";
|
const char LOADSTOP_EVENT[] = "{type: 'loadstop'}";
|
||||||
const char LOADERROR_EVENT[] = "'loaderror'";
|
const char LOADERROR_EVENT[] = "{type: 'loaderror'}";
|
||||||
|
|
||||||
void Inappbrowser::open(int cb, int, const QString &url, const QString &windowName, const QString &windowFeatures) {
|
void Inappbrowser::open(int cb, int, const QString &url, const QString &, const QString &) {
|
||||||
assert(_eventCb == 0);
|
assert(_eventCb == 0);
|
||||||
|
|
||||||
_eventCb = cb;
|
_eventCb = cb;
|
||||||
|
|
||||||
QString path = m_cordova->get_app_dir() + "/../qml/InAppBrowser.qml";
|
QString path = m_cordova->get_app_dir() + "/../qml/InAppBrowser.qml";
|
||||||
|
|
||||||
// TODO: relative url
|
|
||||||
QString qml = QString(code)
|
QString qml = QString(code)
|
||||||
.arg(CordovaInternal::format(path)).arg(CordovaInternal::format(url));
|
.arg(CordovaInternal::format(path)).arg(CordovaInternal::format(url));
|
||||||
m_cordova->execQML(qml);
|
m_cordova->execQML(qml);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Inappbrowser::show(int, int) {
|
void Inappbrowser::show(int, int) {
|
||||||
m_cordova->execQML("CordovaWrapper.object.visible = true");
|
m_cordova->execQML("CordovaWrapper.global.inappbrowser.visible = true");
|
||||||
}
|
}
|
||||||
|
|
||||||
void Inappbrowser::close(int, int) {
|
void Inappbrowser::close(int, int) {
|
||||||
m_cordova->execQML("CordovaWrapper.object.destroy()");
|
m_cordova->execQML("CordovaWrapper.global.inappbrowser.destroy()");
|
||||||
this->callbackWithoutRemove(_eventCb, EXIT_EVENT);
|
this->callbackWithoutRemove(_eventCb, EXIT_EVENT);
|
||||||
_eventCb = 0;
|
_eventCb = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Inappbrowser::injectStyleFile(int cb, int, const QString&, bool) {
|
void Inappbrowser::injectStyleFile(int scId, int ecId, const QString& src, bool b) {
|
||||||
// TODO:
|
QString code("(function(d) { var c = d.createElement('link'); c.rel='stylesheet'; c.type='text/css'; c.href = %1; d.head.appendChild(c);})(document)");
|
||||||
qCritical() << "unimplemented " << __PRETTY_FUNCTION__;
|
code = code.arg(CordovaInternal::format(src));
|
||||||
|
|
||||||
|
injectScriptCode(scId, ecId, code, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Inappbrowser::injectStyleCode(int cb, int, const QString&, bool) {
|
void Inappbrowser::injectStyleCode(int scId, int ecId, const QString& src, bool b) {
|
||||||
// TODO:
|
QString code("(function(d) { var c = d.createElement('style'); c.innerHTML = %1; d.body.appendChild(c); })(document)");
|
||||||
qCritical() << "unimplemented " << __PRETTY_FUNCTION__;
|
code = code.arg(CordovaInternal::format(src));
|
||||||
|
|
||||||
|
injectScriptCode(scId, ecId, code, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Inappbrowser::injectScriptFile(int cb, int, const QString&, bool) {
|
void Inappbrowser::injectScriptFile(int scId, int ecId, const QString& src, bool b) {
|
||||||
// TODO:
|
QString code("(function(d) { var c = d.createElement('script'); c.src = %1; d.body.appendChild(c);})(document)");
|
||||||
qCritical() << "unimplemented " << __PRETTY_FUNCTION__;
|
code = code.arg(CordovaInternal::format(src));
|
||||||
|
|
||||||
|
injectScriptCode(scId, ecId, code, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Inappbrowser::injectScriptCode(int cb, int, const QString&, bool) {
|
void Inappbrowser::injectScriptCode(int scId, int, const QString& code, bool) {
|
||||||
// TODO:
|
m_cordova->execQML(QString("CordovaWrapper.global.inappbrowser.executeJS(%2, %1)").arg(CordovaInternal::format(code)).arg(scId));
|
||||||
qCritical() << "unimplemented " << __PRETTY_FUNCTION__;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Inappbrowser::loadFinished(int status) {
|
void Inappbrowser::loadFinished(bool status) {
|
||||||
if (status == 2) {
|
if (!status) {
|
||||||
this->callbackWithoutRemove(_eventCb, LOADERROR_EVENT);
|
this->callbackWithoutRemove(_eventCb, LOADSTOP_EVENT);
|
||||||
}
|
} else {
|
||||||
if (status == 0) {
|
|
||||||
this->callbackWithoutRemove(_eventCb, LOADSTART_EVENT);
|
this->callbackWithoutRemove(_eventCb, LOADSTART_EVENT);
|
||||||
}
|
}
|
||||||
if (status == 3) {
|
|
||||||
this->callbackWithoutRemove(_eventCb, LOADSTOP_EVENT);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public slots:
|
|||||||
void injectScriptFile(int cb, int, const QString&, bool);
|
void injectScriptFile(int cb, int, const QString&, bool);
|
||||||
void injectScriptCode(int cb, int, const QString&, bool);
|
void injectScriptCode(int cb, int, const QString&, bool);
|
||||||
|
|
||||||
void loadFinished(int status);
|
void loadFinished(bool status);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int _eventCb;
|
int _eventCb;
|
||||||
|
|||||||
@@ -0,0 +1,260 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*jslint sloppy:true */
|
||||||
|
/*global Windows:true, require, document, setTimeout, window, module */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var cordova = require('cordova'),
|
||||||
|
channel = require('cordova/channel'),
|
||||||
|
urlutil = require('cordova/urlutil');
|
||||||
|
|
||||||
|
var browserWrap,
|
||||||
|
popup,
|
||||||
|
navigationButtonsDiv,
|
||||||
|
navigationButtonsDivInner,
|
||||||
|
backButton,
|
||||||
|
forwardButton,
|
||||||
|
closeButton;
|
||||||
|
|
||||||
|
// x-ms-webview is available starting from Windows 8.1 (platformId is 'windows')
|
||||||
|
// http://msdn.microsoft.com/en-us/library/windows/apps/dn301831.aspx
|
||||||
|
var isWebViewAvailable = cordova.platformId == 'windows';
|
||||||
|
|
||||||
|
function attachNavigationEvents(element, callback) {
|
||||||
|
if (isWebViewAvailable) {
|
||||||
|
element.addEventListener("MSWebViewNavigationStarting", function (e) {
|
||||||
|
callback({ type: "loadstart", url: e.uri}, {keepCallback: true} );
|
||||||
|
});
|
||||||
|
|
||||||
|
element.addEventListener("MSWebViewNavigationCompleted", function (e) {
|
||||||
|
callback({ type: e.isSuccess ? "loadstop" : "loaderror", url: e.uri}, {keepCallback: true});
|
||||||
|
});
|
||||||
|
|
||||||
|
element.addEventListener("MSWebViewUnviewableContentIdentified", function (e) {
|
||||||
|
// WebView found the content to be not HTML.
|
||||||
|
// http://msdn.microsoft.com/en-us/library/windows/apps/dn609716.aspx
|
||||||
|
callback({ type: "loaderror", url: e.uri}, {keepCallback: true});
|
||||||
|
});
|
||||||
|
|
||||||
|
element.addEventListener("MSWebViewContentLoading", function (e) {
|
||||||
|
if (navigationButtonsDiv) {
|
||||||
|
backButton.disabled = !popup.canGoBack;
|
||||||
|
forwardButton.disabled = !popup.canGoForward;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
var onError = function () {
|
||||||
|
callback({ type: "loaderror", url: this.contentWindow.location}, {keepCallback: true});
|
||||||
|
};
|
||||||
|
|
||||||
|
element.addEventListener("unload", function () {
|
||||||
|
callback({ type: "loadstart", url: this.contentWindow.location}, {keepCallback: true});
|
||||||
|
});
|
||||||
|
|
||||||
|
element.addEventListener("load", function () {
|
||||||
|
callback({ type: "loadstop", url: this.contentWindow.location}, {keepCallback: true});
|
||||||
|
});
|
||||||
|
|
||||||
|
element.addEventListener("error", onError);
|
||||||
|
element.addEventListener("abort", onError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var IAB = {
|
||||||
|
close: function (win, lose) {
|
||||||
|
if (browserWrap) {
|
||||||
|
if (win) win({ type: "exit" });
|
||||||
|
|
||||||
|
browserWrap.parentNode.removeChild(browserWrap);
|
||||||
|
browserWrap = null;
|
||||||
|
popup = null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
show: function (win, lose) {
|
||||||
|
if (browserWrap) {
|
||||||
|
browserWrap.style.display = "block";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
open: function (win, lose, args) {
|
||||||
|
var strUrl = args[0],
|
||||||
|
target = args[1],
|
||||||
|
features = args[2],
|
||||||
|
url;
|
||||||
|
|
||||||
|
if (target === "_system") {
|
||||||
|
url = new Windows.Foundation.Uri(strUrl);
|
||||||
|
Windows.System.Launcher.launchUriAsync(url);
|
||||||
|
} else if (target === "_self" || !target) {
|
||||||
|
window.location = strUrl;
|
||||||
|
} else {
|
||||||
|
// "_blank" or anything else
|
||||||
|
if (!browserWrap) {
|
||||||
|
browserWrap = document.createElement("div");
|
||||||
|
browserWrap.style.position = "absolute";
|
||||||
|
browserWrap.style.borderWidth = "40px";
|
||||||
|
browserWrap.style.width = "calc(100% - 80px)";
|
||||||
|
browserWrap.style.height = "calc(100% - 80px)";
|
||||||
|
browserWrap.style.borderStyle = "solid";
|
||||||
|
browserWrap.style.borderColor = "rgba(0,0,0,0.25)";
|
||||||
|
|
||||||
|
browserWrap.onclick = function () {
|
||||||
|
setTimeout(function () {
|
||||||
|
IAB.close(win);
|
||||||
|
}, 0);
|
||||||
|
};
|
||||||
|
|
||||||
|
document.body.appendChild(browserWrap);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (features.indexOf("hidden=yes") !== -1) {
|
||||||
|
browserWrap.style.display = "none";
|
||||||
|
}
|
||||||
|
|
||||||
|
popup = document.createElement(isWebViewAvailable ? "x-ms-webview" : "iframe");
|
||||||
|
popup.style.borderWidth = "0px";
|
||||||
|
popup.style.width = "100%";
|
||||||
|
|
||||||
|
browserWrap.appendChild(popup);
|
||||||
|
|
||||||
|
if (features.indexOf("location=yes") !== -1 || features.indexOf("location") === -1) {
|
||||||
|
popup.style.height = "calc(100% - 60px)";
|
||||||
|
|
||||||
|
navigationButtonsDiv = document.createElement("div");
|
||||||
|
navigationButtonsDiv.style.height = "60px";
|
||||||
|
navigationButtonsDiv.style.backgroundColor = "#404040";
|
||||||
|
navigationButtonsDiv.style.zIndex = "999";
|
||||||
|
navigationButtonsDiv.onclick = function (e) {
|
||||||
|
e.cancelBubble = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
navigationButtonsDivInner = document.createElement("div");
|
||||||
|
navigationButtonsDivInner.style.paddingTop = "10px";
|
||||||
|
navigationButtonsDivInner.style.height = "50px";
|
||||||
|
navigationButtonsDivInner.style.width = "160px";
|
||||||
|
navigationButtonsDivInner.style.margin = "0 auto";
|
||||||
|
navigationButtonsDivInner.style.backgroundColor = "#404040";
|
||||||
|
navigationButtonsDivInner.style.zIndex = "999";
|
||||||
|
navigationButtonsDivInner.onclick = function (e) {
|
||||||
|
e.cancelBubble = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
backButton = document.createElement("button");
|
||||||
|
backButton.style.width = "40px";
|
||||||
|
backButton.style.height = "40px";
|
||||||
|
backButton.style.borderRadius = "40px";
|
||||||
|
|
||||||
|
backButton.innerText = "<-";
|
||||||
|
backButton.addEventListener("click", function (e) {
|
||||||
|
if (popup.canGoBack)
|
||||||
|
popup.goBack();
|
||||||
|
});
|
||||||
|
|
||||||
|
forwardButton = document.createElement("button");
|
||||||
|
forwardButton.style.marginLeft = "20px";
|
||||||
|
forwardButton.style.width = "40px";
|
||||||
|
forwardButton.style.height = "40px";
|
||||||
|
forwardButton.style.borderRadius = "40px";
|
||||||
|
|
||||||
|
forwardButton.innerText = "->";
|
||||||
|
forwardButton.addEventListener("click", function (e) {
|
||||||
|
if (popup.canGoForward)
|
||||||
|
popup.goForward();
|
||||||
|
});
|
||||||
|
|
||||||
|
closeButton = document.createElement("button");
|
||||||
|
closeButton.style.marginLeft = "20px";
|
||||||
|
closeButton.style.width = "40px";
|
||||||
|
closeButton.style.height = "40px";
|
||||||
|
closeButton.style.borderRadius = "40px";
|
||||||
|
|
||||||
|
closeButton.innerText = "x";
|
||||||
|
closeButton.addEventListener("click", function (e) {
|
||||||
|
setTimeout(function () {
|
||||||
|
IAB.close(win);
|
||||||
|
}, 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!isWebViewAvailable) {
|
||||||
|
// iframe navigation is not yet supported
|
||||||
|
backButton.disabled = true;
|
||||||
|
forwardButton.disabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
navigationButtonsDivInner.appendChild(backButton);
|
||||||
|
navigationButtonsDivInner.appendChild(forwardButton);
|
||||||
|
navigationButtonsDivInner.appendChild(closeButton);
|
||||||
|
navigationButtonsDiv.appendChild(navigationButtonsDivInner);
|
||||||
|
|
||||||
|
browserWrap.appendChild(navigationButtonsDiv);
|
||||||
|
} else {
|
||||||
|
popup.style.height = "100%";
|
||||||
|
}
|
||||||
|
|
||||||
|
// start listening for navigation events
|
||||||
|
attachNavigationEvents(popup, win);
|
||||||
|
|
||||||
|
if (isWebViewAvailable) {
|
||||||
|
strUrl = strUrl.replace("ms-appx://", "ms-appx-web://");
|
||||||
|
}
|
||||||
|
popup.src = strUrl;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
injectScriptCode: function (win, fail, args) {
|
||||||
|
var code = args[0],
|
||||||
|
hasCallback = args[1];
|
||||||
|
|
||||||
|
if (isWebViewAvailable && browserWrap && popup) {
|
||||||
|
var op = popup.invokeScriptAsync("eval", code);
|
||||||
|
op.oncomplete = function () { hasCallback && win([]); };
|
||||||
|
op.onerror = function () { };
|
||||||
|
op.start();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
injectScriptFile: function (win, fail, args) {
|
||||||
|
var filePath = args[0],
|
||||||
|
hasCallback = args[1];
|
||||||
|
|
||||||
|
if (!!filePath) {
|
||||||
|
filePath = urlutil.makeAbsolute(filePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isWebViewAvailable && browserWrap && popup) {
|
||||||
|
var uri = new Windows.Foundation.Uri(filePath);
|
||||||
|
Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).done(function (file) {
|
||||||
|
Windows.Storage.FileIO.readTextAsync(file).done(function (code) {
|
||||||
|
var op = popup.invokeScriptAsync("eval", code);
|
||||||
|
op.oncomplete = function () { hasCallback && win([]); };
|
||||||
|
op.onerror = function () { };
|
||||||
|
op.start();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = IAB;
|
||||||
|
|
||||||
|
require("cordova/exec/proxy").add("InAppBrowser", module.exports);
|
||||||
+145
-38
@@ -1,21 +1,38 @@
|
|||||||
using System;
|
/*
|
||||||
using System.Net;
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using System.Windows.Documents;
|
|
||||||
using System.Windows.Ink;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using System.Windows.Media.Animation;
|
|
||||||
using System.Windows.Shapes;
|
|
||||||
using Microsoft.Phone.Controls;
|
using Microsoft.Phone.Controls;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Runtime.Serialization;
|
|
||||||
using WPCordovaClassLib.Cordova;
|
|
||||||
using WPCordovaClassLib.Cordova.Commands;
|
|
||||||
using WPCordovaClassLib.Cordova.JSON;
|
|
||||||
using Microsoft.Phone.Shell;
|
using Microsoft.Phone.Shell;
|
||||||
|
|
||||||
|
#if WP8
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Windows.ApplicationModel;
|
||||||
|
using Windows.Storage;
|
||||||
|
using Windows.System;
|
||||||
|
|
||||||
|
//Use alias in case Cordova File Plugin is enabled. Then the File class will be declared in both and error will occur.
|
||||||
|
using IOFile = System.IO.File;
|
||||||
|
#else
|
||||||
using Microsoft.Phone.Tasks;
|
using Microsoft.Phone.Tasks;
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace WPCordovaClassLib.Cordova.Commands
|
namespace WPCordovaClassLib.Cordova.Commands
|
||||||
{
|
{
|
||||||
@@ -41,6 +58,8 @@ namespace WPCordovaClassLib.Cordova.Commands
|
|||||||
protected bool ShowLocation {get;set;}
|
protected bool ShowLocation {get;set;}
|
||||||
protected bool StartHidden {get;set;}
|
protected bool StartHidden {get;set;}
|
||||||
|
|
||||||
|
protected string NavigationCallbackId { get; set; }
|
||||||
|
|
||||||
public void open(string options)
|
public void open(string options)
|
||||||
{
|
{
|
||||||
// reset defaults on ShowLocation + StartHidden features
|
// reset defaults on ShowLocation + StartHidden features
|
||||||
@@ -52,28 +71,31 @@ namespace WPCordovaClassLib.Cordova.Commands
|
|||||||
string urlLoc = args[0];
|
string urlLoc = args[0];
|
||||||
string target = args[1];
|
string target = args[1];
|
||||||
string featString = args[2];
|
string featString = args[2];
|
||||||
|
this.NavigationCallbackId = args[3];
|
||||||
|
|
||||||
string[] features = featString.Split(',');
|
if (!string.IsNullOrEmpty(featString))
|
||||||
foreach (string str in features)
|
|
||||||
{
|
{
|
||||||
try
|
string[] features = featString.Split(',');
|
||||||
|
foreach (string str in features)
|
||||||
{
|
{
|
||||||
string[] split = str.Split('=');
|
try
|
||||||
switch (split[0])
|
|
||||||
{
|
{
|
||||||
case "location":
|
string[] split = str.Split('=');
|
||||||
ShowLocation = split[1].ToLower().StartsWith("yes");
|
switch (split[0])
|
||||||
break;
|
{
|
||||||
case "hidden":
|
case "location":
|
||||||
StartHidden = split[1].ToLower().StartsWith("yes");
|
ShowLocation = split[1].StartsWith("yes", StringComparison.OrdinalIgnoreCase);
|
||||||
break;
|
break;
|
||||||
|
case "hidden":
|
||||||
|
StartHidden = split[1].StartsWith("yes", StringComparison.OrdinalIgnoreCase);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
// some sort of invalid param was passed, moving on ...
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(Exception)
|
|
||||||
{
|
|
||||||
// some sort of invalid param was passed, moving on ...
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
_self - opens in the Cordova WebView if url is in the white-list, else it opens in the InAppBrowser
|
_self - opens in the Cordova WebView if url is in the white-list, else it opens in the InAppBrowser
|
||||||
@@ -184,7 +206,6 @@ namespace WPCordovaClassLib.Cordova.Commands
|
|||||||
//throw new NotImplementedException("Windows Phone does not currently support 'insertCSS'");
|
//throw new NotImplementedException("Windows Phone does not currently support 'insertCSS'");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void ShowCordovaBrowser(string url)
|
private void ShowCordovaBrowser(string url)
|
||||||
{
|
{
|
||||||
Uri loc = new Uri(url, UriKind.RelativeOrAbsolute);
|
Uri loc = new Uri(url, UriKind.RelativeOrAbsolute);
|
||||||
@@ -200,7 +221,7 @@ namespace WPCordovaClassLib.Cordova.Commands
|
|||||||
if (cView != null)
|
if (cView != null)
|
||||||
{
|
{
|
||||||
WebBrowser br = cView.Browser;
|
WebBrowser br = cView.Browser;
|
||||||
br.Navigate(loc);
|
br.Navigate2(loc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,13 +229,53 @@ namespace WPCordovaClassLib.Cordova.Commands
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if WP8
|
||||||
|
private async void ShowSystemBrowser(string url)
|
||||||
|
{
|
||||||
|
var pathUri = new Uri(url, UriKind.Absolute);
|
||||||
|
if (pathUri.Scheme == Uri.UriSchemeHttp || pathUri.Scheme == Uri.UriSchemeHttps)
|
||||||
|
{
|
||||||
|
await Launcher.LaunchUriAsync(pathUri);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var file = await GetFile(pathUri.AbsolutePath.Replace('/', Path.DirectorySeparatorChar));
|
||||||
|
if (file != null)
|
||||||
|
{
|
||||||
|
await Launcher.LaunchFileAsync(file);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.WriteLine("File not found.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task<StorageFile> GetFile(string fileName)
|
||||||
|
{
|
||||||
|
//first try to get the file from the isolated storage
|
||||||
|
var localFolder = ApplicationData.Current.LocalFolder;
|
||||||
|
if (IOFile.Exists(Path.Combine(localFolder.Path, fileName)))
|
||||||
|
{
|
||||||
|
return await localFolder.GetFileAsync(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
//if file is not found try to get it from the xap
|
||||||
|
var filePath = Path.Combine(Package.Current.InstalledLocation.Path, fileName);
|
||||||
|
if (IOFile.Exists(filePath))
|
||||||
|
{
|
||||||
|
return await StorageFile.GetFileFromPathAsync(filePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
#else
|
||||||
private void ShowSystemBrowser(string url)
|
private void ShowSystemBrowser(string url)
|
||||||
{
|
{
|
||||||
WebBrowserTask webBrowserTask = new WebBrowserTask();
|
WebBrowserTask webBrowserTask = new WebBrowserTask();
|
||||||
webBrowserTask.Uri = new Uri(url, UriKind.Absolute);
|
webBrowserTask.Uri = new Uri(url, UriKind.Absolute);
|
||||||
webBrowserTask.Show();
|
webBrowserTask.Show();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
private void ShowInAppBrowser(string url)
|
private void ShowInAppBrowser(string url)
|
||||||
{
|
{
|
||||||
@@ -225,7 +286,7 @@ namespace WPCordovaClassLib.Cordova.Commands
|
|||||||
if (browser != null)
|
if (browser != null)
|
||||||
{
|
{
|
||||||
//browser.IsGeolocationEnabled = opts.isGeolocationEnabled;
|
//browser.IsGeolocationEnabled = opts.isGeolocationEnabled;
|
||||||
browser.Navigate(loc);
|
browser.Navigate2(loc);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -248,7 +309,7 @@ namespace WPCordovaClassLib.Cordova.Commands
|
|||||||
browser.Navigating += new EventHandler<NavigatingEventArgs>(browser_Navigating);
|
browser.Navigating += new EventHandler<NavigatingEventArgs>(browser_Navigating);
|
||||||
browser.NavigationFailed += new System.Windows.Navigation.NavigationFailedEventHandler(browser_NavigationFailed);
|
browser.NavigationFailed += new System.Windows.Navigation.NavigationFailedEventHandler(browser_NavigationFailed);
|
||||||
browser.Navigated += new EventHandler<System.Windows.Navigation.NavigationEventArgs>(browser_Navigated);
|
browser.Navigated += new EventHandler<System.Windows.Navigation.NavigationEventArgs>(browser_Navigated);
|
||||||
browser.Navigate(loc);
|
browser.Navigate2(loc);
|
||||||
|
|
||||||
if (StartHidden)
|
if (StartHidden)
|
||||||
{
|
{
|
||||||
@@ -287,6 +348,8 @@ namespace WPCordovaClassLib.Cordova.Commands
|
|||||||
bar.IsVisible = !StartHidden;
|
bar.IsVisible = !StartHidden;
|
||||||
AppBar = bar;
|
AppBar = bar;
|
||||||
|
|
||||||
|
page.BackKeyPress += page_BackKeyPress;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -294,6 +357,23 @@ namespace WPCordovaClassLib.Cordova.Commands
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void page_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e)
|
||||||
|
{
|
||||||
|
#if WP8
|
||||||
|
if (browser.CanGoBack)
|
||||||
|
{
|
||||||
|
browser.GoBack();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
e.Cancel = true;
|
||||||
|
#else
|
||||||
|
browser.InvokeScript("execScript", "history.back();");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void browser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
|
void browser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -326,7 +406,7 @@ namespace WPCordovaClassLib.Cordova.Commands
|
|||||||
{
|
{
|
||||||
#if WP8
|
#if WP8
|
||||||
browser.GoBack();
|
browser.GoBack();
|
||||||
#else
|
#else
|
||||||
browser.InvokeScript("execScript", "history.back();");
|
browser.InvokeScript("execScript", "history.back();");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -361,13 +441,15 @@ namespace WPCordovaClassLib.Cordova.Commands
|
|||||||
grid.Children.Remove(browser);
|
grid.Children.Remove(browser);
|
||||||
}
|
}
|
||||||
page.ApplicationBar = null;
|
page.ApplicationBar = null;
|
||||||
|
page.BackKeyPress -= page_BackKeyPress;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
browser = null;
|
browser = null;
|
||||||
string message = "{\"type\":\"exit\"}";
|
string message = "{\"type\":\"exit\"}";
|
||||||
PluginResult result = new PluginResult(PluginResult.Status.OK, message);
|
PluginResult result = new PluginResult(PluginResult.Status.OK, message);
|
||||||
result.KeepCallback = false;
|
result.KeepCallback = false;
|
||||||
this.DispatchCommandResult(result);
|
this.DispatchCommandResult(result, NavigationCallbackId);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -385,7 +467,7 @@ namespace WPCordovaClassLib.Cordova.Commands
|
|||||||
string message = "{\"type\":\"loadstop\", \"url\":\"" + e.Uri.OriginalString + "\"}";
|
string message = "{\"type\":\"loadstop\", \"url\":\"" + e.Uri.OriginalString + "\"}";
|
||||||
PluginResult result = new PluginResult(PluginResult.Status.OK, message);
|
PluginResult result = new PluginResult(PluginResult.Status.OK, message);
|
||||||
result.KeepCallback = true;
|
result.KeepCallback = true;
|
||||||
this.DispatchCommandResult(result);
|
this.DispatchCommandResult(result, NavigationCallbackId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void browser_NavigationFailed(object sender, System.Windows.Navigation.NavigationFailedEventArgs e)
|
void browser_NavigationFailed(object sender, System.Windows.Navigation.NavigationFailedEventArgs e)
|
||||||
@@ -393,7 +475,7 @@ namespace WPCordovaClassLib.Cordova.Commands
|
|||||||
string message = "{\"type\":\"error\",\"url\":\"" + e.Uri.OriginalString + "\"}";
|
string message = "{\"type\":\"error\",\"url\":\"" + e.Uri.OriginalString + "\"}";
|
||||||
PluginResult result = new PluginResult(PluginResult.Status.ERROR, message);
|
PluginResult result = new PluginResult(PluginResult.Status.ERROR, message);
|
||||||
result.KeepCallback = true;
|
result.KeepCallback = true;
|
||||||
this.DispatchCommandResult(result);
|
this.DispatchCommandResult(result, NavigationCallbackId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void browser_Navigating(object sender, NavigatingEventArgs e)
|
void browser_Navigating(object sender, NavigatingEventArgs e)
|
||||||
@@ -401,8 +483,33 @@ namespace WPCordovaClassLib.Cordova.Commands
|
|||||||
string message = "{\"type\":\"loadstart\",\"url\":\"" + e.Uri.OriginalString + "\"}";
|
string message = "{\"type\":\"loadstart\",\"url\":\"" + e.Uri.OriginalString + "\"}";
|
||||||
PluginResult result = new PluginResult(PluginResult.Status.OK, message);
|
PluginResult result = new PluginResult(PluginResult.Status.OK, message);
|
||||||
result.KeepCallback = true;
|
result.KeepCallback = true;
|
||||||
this.DispatchCommandResult(result);
|
this.DispatchCommandResult(result, NavigationCallbackId);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal static class WebBrowserExtensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Improved method to initiate request to the provided URI. Supports 'data:text/html' urls.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="browser">The browser instance</param>
|
||||||
|
/// <param name="uri">The requested uri</param>
|
||||||
|
internal static void Navigate2(this WebBrowser browser, Uri uri)
|
||||||
|
{
|
||||||
|
// IE10 does not support data uri so we use NavigateToString method instead
|
||||||
|
if (uri.Scheme == "data")
|
||||||
|
{
|
||||||
|
// we should remove the scheme identifier and unescape the uri
|
||||||
|
string uriString = Uri.UnescapeDataString(uri.AbsoluteUri);
|
||||||
|
// format is 'data:text/html, ...'
|
||||||
|
string html = new System.Text.RegularExpressions.Regex("^data:text/html,").Replace(uriString, "");
|
||||||
|
browser.NavigateToString(html);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
browser.Navigate(uri);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
|
||||||
|
id="org.apache.cordova.inappbrowser.tests"
|
||||||
|
version="0.6.0">
|
||||||
|
<name>Cordova InAppBrowser Plugin Tests</name>
|
||||||
|
<license>Apache 2.0</license>
|
||||||
|
|
||||||
|
<js-module src="tests.js" name="tests">
|
||||||
|
</js-module>
|
||||||
|
|
||||||
|
<asset src="resources" target="cdvtests/iab-resources" />
|
||||||
|
</plugin>
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
#style-update-file {
|
||||||
|
display: block !important;
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<!--
|
||||||
|
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta name="viewport" content="width=device-width,height=device-height,user-scalable=no,maximum-scale=1.0,initial-scale=1.0" />
|
||||||
|
<meta http-equiv="Content-type" content="text/html; charset=utf-8"> <!-- ISO-8859-1 -->
|
||||||
|
<title>Cordova Mobile Spec</title>
|
||||||
|
<link rel="stylesheet" href="../../master.css" type="text/css" media="screen" title="no title" charset="utf-8">
|
||||||
|
</head>
|
||||||
|
<body id="stage" class="theme">
|
||||||
|
<h1 id="header">InAppBrowser - Script / Style Injection Test</h1>
|
||||||
|
<h2 id="style-update-file" style="display:none">Style updated from file</h2>
|
||||||
|
<h2 id="style-update-literal" style="display:none">Style updated from literal</h2>
|
||||||
|
<div>User-Agent: <cite id="u-a"></cite></div>
|
||||||
|
</body>
|
||||||
|
<script>
|
||||||
|
function updateUserAgent() {
|
||||||
|
document.getElementById("u-a").textContent = navigator.userAgent;
|
||||||
|
}
|
||||||
|
updateUserAgent();
|
||||||
|
window.setInterval(updateUserAgent, 1500);
|
||||||
|
</script>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
var d = document.getElementById("header")
|
||||||
|
d.innerHTML = "Script file successfully injected";
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<!--
|
||||||
|
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta name="viewport" content="width=device-width,height=device-height,user-scalable=no,maximum-scale=1.0,initial-scale=1.0" />
|
||||||
|
<meta http-equiv="Content-type" content="text/html; charset=utf-8"> <!-- ISO-8859-1 -->
|
||||||
|
<title>IAB test page</title>
|
||||||
|
<script type="text/javascript" charset="utf-8" src="../../cordova-incl.js"></script>
|
||||||
|
<script type="text/javascript" charset="utf-8">
|
||||||
|
function onDeviceReady() {
|
||||||
|
document.getElementById("hint").textContent = "Running CordovaWebView, deviceVersion=" + device.version + ", no toolbar should be present, Back link should work, logcat should NOT have failed 'gap:' calls.";
|
||||||
|
}
|
||||||
|
document.addEventListener("deviceready", onDeviceReady, false);
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
body {background-color: #ffffff;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body id="stage" class="theme">
|
||||||
|
<h1>Local URL</h1>
|
||||||
|
<div id="info">
|
||||||
|
You have successfully loaded a local URL:
|
||||||
|
<script>document.write(location.href)</script>
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<div>User-Agent = <span id="u-a"></span></div>
|
||||||
|
<hr />
|
||||||
|
<div id="hint">Likely running inAppBrowser: Device version from Cordova=not found, Back link should not work, toolbar may be present, logcat should show failed 'gap:' calls.</div>
|
||||||
|
<hr />
|
||||||
|
<div><a href="http://www.google.com">Visit Google</a> (whitelisted)</div>
|
||||||
|
<div><a href="http://www.yahoo.com">Visit Yahoo</a> (not whitelisted)</div>
|
||||||
|
<div><a href="http://www.stluciadance.com/prospectus_file/sample.pdf">Check out my remote PDF</a></div>
|
||||||
|
<div><a href="local.pdf">Check out my local PDF</a></div>
|
||||||
|
<p /><a href="javascript:;" onclick="history.back();">Back</a>
|
||||||
|
<p />
|
||||||
|
<a name="anchor2"></a>
|
||||||
|
<div style="height: 1000px;border:1px solid red;">tall div with border</div>
|
||||||
|
</body>
|
||||||
|
<script>
|
||||||
|
function updateUserAgent() {
|
||||||
|
document.getElementById("u-a").textContent = navigator.userAgent;
|
||||||
|
}
|
||||||
|
updateUserAgent();
|
||||||
|
window.setInterval(updateUserAgent, 1500);
|
||||||
|
</script>
|
||||||
|
</html>
|
||||||
Binary file not shown.
@@ -0,0 +1,42 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<!--
|
||||||
|
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta name="viewport" content="width=device-width,height=device-height,user-scalable=no,maximum-scale=1.0,initial-scale=1.0" />
|
||||||
|
<meta http-equiv="Content-type" content="text/html; charset=utf-8"> <!-- ISO-8859-1 -->
|
||||||
|
<title>Cordova Mobile Spec</title>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<video width=100% height=100% id="player">
|
||||||
|
<source src="http://m.comptoir-info.com/app/beta/sample.mp4">
|
||||||
|
<meta property="og:video:secure_url" content="http://m.comptoir-info.com/app/beta/sample.mp4">
|
||||||
|
<meta property="og:video:type" content="video/mp4">
|
||||||
|
</video>
|
||||||
|
<div>
|
||||||
|
<button onclick="document.getElementById('player').play()"> play </button>
|
||||||
|
<button onclick="document.getElementById('player').pause()"> pause </button>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
+476
@@ -0,0 +1,476 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
var cordova = require('cordova');
|
||||||
|
var isWindows = cordova.platformId == 'windows';
|
||||||
|
|
||||||
|
window.alert = window.alert || navigator.notification.alert;
|
||||||
|
|
||||||
|
exports.defineManualTests = function (contentEl, createActionButton) {
|
||||||
|
|
||||||
|
function doOpen(url, target, params, numExpectedRedirects) {
|
||||||
|
numExpectedRedirects = numExpectedRedirects || 0;
|
||||||
|
console.log("Opening " + url);
|
||||||
|
|
||||||
|
var counts;
|
||||||
|
var lastLoadStartURL;
|
||||||
|
var wasReset = false;
|
||||||
|
function reset() {
|
||||||
|
counts = {
|
||||||
|
'loaderror': 0,
|
||||||
|
'loadstart': 0,
|
||||||
|
'loadstop': 0,
|
||||||
|
'exit': 0
|
||||||
|
};
|
||||||
|
lastLoadStartURL = '';
|
||||||
|
}
|
||||||
|
reset();
|
||||||
|
|
||||||
|
var iab = window.open(url, target, params, {
|
||||||
|
loaderror: logEvent,
|
||||||
|
loadstart: logEvent,
|
||||||
|
loadstop: logEvent,
|
||||||
|
exit: logEvent
|
||||||
|
});
|
||||||
|
if (!iab) {
|
||||||
|
alert('window.open returned ' + iab);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
function logEvent(e) {
|
||||||
|
console.log('IAB event=' + JSON.stringify(e));
|
||||||
|
counts[e.type]++;
|
||||||
|
// Verify that event.url gets updated on redirects.
|
||||||
|
if (e.type == 'loadstart') {
|
||||||
|
if (e.url == lastLoadStartURL) {
|
||||||
|
alert('Unexpected: loadstart fired multiple times for the same URL.');
|
||||||
|
}
|
||||||
|
lastLoadStartURL = e.url;
|
||||||
|
}
|
||||||
|
// Verify the right number of loadstart events were fired.
|
||||||
|
if (e.type == 'loadstop' || e.type == 'loaderror') {
|
||||||
|
if (e.url != lastLoadStartURL) {
|
||||||
|
alert('Unexpected: ' + e.type + ' event.url != loadstart\'s event.url');
|
||||||
|
}
|
||||||
|
if (numExpectedRedirects === 0 && counts['loadstart'] !== 1) {
|
||||||
|
// Do allow a loaderror without a loadstart (e.g. in the case of an invalid URL).
|
||||||
|
if (!(e.type == 'loaderror' && counts['loadstart'] === 0)) {
|
||||||
|
alert('Unexpected: got multiple loadstart events. (' + counts['loadstart'] + ')');
|
||||||
|
}
|
||||||
|
} else if (numExpectedRedirects > 0 && counts['loadstart'] < (numExpectedRedirects + 1)) {
|
||||||
|
alert('Unexpected: should have got at least ' + (numExpectedRedirects + 1) + ' loadstart events, but got ' + counts['loadstart']);
|
||||||
|
}
|
||||||
|
wasReset = true;
|
||||||
|
numExpectedRedirects = 0;
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
// Verify that loadend / loaderror was called.
|
||||||
|
if (e.type == 'exit') {
|
||||||
|
var numStopEvents = counts['loadstop'] + counts['loaderror'];
|
||||||
|
if (numStopEvents === 0 && !wasReset) {
|
||||||
|
alert('Unexpected: browser closed without a loadstop or loaderror.')
|
||||||
|
} else if (numStopEvents > 1) {
|
||||||
|
alert('Unexpected: got multiple loadstop/loaderror events.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return iab;
|
||||||
|
}
|
||||||
|
|
||||||
|
function openWithStyle(url, cssUrl, useCallback) {
|
||||||
|
var iab = doOpen(url, '_blank', 'location=yes');
|
||||||
|
var callback = function (results) {
|
||||||
|
if (results && results.length === 0) {
|
||||||
|
alert('Results verified');
|
||||||
|
} else {
|
||||||
|
console.log(results);
|
||||||
|
alert('Got: ' + typeof (results) + '\n' + JSON.stringify(results));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if (cssUrl) {
|
||||||
|
iab.addEventListener('loadstop', function (event) {
|
||||||
|
iab.insertCSS({ file: cssUrl }, useCallback && callback);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
iab.addEventListener('loadstop', function (event) {
|
||||||
|
iab.insertCSS({ code: '#style-update-literal { \ndisplay: block !important; \n}' },
|
||||||
|
useCallback && callback);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function openWithScript(url, jsUrl, useCallback) {
|
||||||
|
var iab = doOpen(url, '_blank', 'location=yes');
|
||||||
|
if (jsUrl) {
|
||||||
|
iab.addEventListener('loadstop', function (event) {
|
||||||
|
iab.executeScript({ file: jsUrl }, useCallback && function (results) {
|
||||||
|
if (results && results.length === 0) {
|
||||||
|
alert('Results verified');
|
||||||
|
} else {
|
||||||
|
console.log(results);
|
||||||
|
alert('Got: ' + typeof (results) + '\n' + JSON.stringify(results));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
iab.addEventListener('loadstop', function (event) {
|
||||||
|
var code = '(function(){\n' +
|
||||||
|
' var header = document.getElementById("header");\n' +
|
||||||
|
' header.innerHTML = "Script literal successfully injected";\n' +
|
||||||
|
' return "abc";\n' +
|
||||||
|
'})()';
|
||||||
|
iab.executeScript({ code: code }, useCallback && function (results) {
|
||||||
|
if (results && results.length === 1 && results[0] === 'abc') {
|
||||||
|
alert('Results verified');
|
||||||
|
} else {
|
||||||
|
console.log(results);
|
||||||
|
alert('Got: ' + typeof (results) + '\n' + JSON.stringify(results));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var hiddenwnd = null;
|
||||||
|
var loadlistener = function (event) { alert('background window loaded '); };
|
||||||
|
function openHidden(url, startHidden) {
|
||||||
|
var shopt = (startHidden) ? 'hidden=yes' : '';
|
||||||
|
hiddenwnd = window.open(url, 'random_string', shopt);
|
||||||
|
if (!hiddenwnd) {
|
||||||
|
alert('window.open returned ' + hiddenwnd);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (startHidden) hiddenwnd.addEventListener('loadstop', loadlistener);
|
||||||
|
}
|
||||||
|
function showHidden() {
|
||||||
|
if (!!hiddenwnd) {
|
||||||
|
hiddenwnd.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function closeHidden() {
|
||||||
|
if (!!hiddenwnd) {
|
||||||
|
hiddenwnd.removeEventListener('loadstop', loadlistener);
|
||||||
|
hiddenwnd.close();
|
||||||
|
hiddenwnd = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var info_div = '<h1>InAppBrowser</h1>' +
|
||||||
|
'<div id="info">' +
|
||||||
|
'Make sure http://cordova.apache.org and http://google.co.uk and https://www.google.co.uk are white listed. </br>' +
|
||||||
|
'Make sure http://www.apple.com is not in the white list.</br>' +
|
||||||
|
'In iOS, starred <span style="vertical-align:super">*</span> tests will put the app in a state with no way to return. </br>' +
|
||||||
|
'<h4>User-Agent: <span id="user-agent"> </span></hr>' +
|
||||||
|
'</div>';
|
||||||
|
|
||||||
|
var local_tests = '<h1>Local URL</h1>' +
|
||||||
|
'<div id="openLocal"></div>' +
|
||||||
|
'Expected result: opens successfully in CordovaWebView.' +
|
||||||
|
'<p/> <div id="openLocalSelf"></div>' +
|
||||||
|
'Expected result: opens successfully in CordovaWebView.' +
|
||||||
|
'<p/> <div id="openLocalSystem"></div>' +
|
||||||
|
'Expected result: fails to open' +
|
||||||
|
'<p/> <div id="openLocalBlank"></div>' +
|
||||||
|
'Expected result: opens successfully in InAppBrowser with locationBar at top.' +
|
||||||
|
'<p/> <div id="openLocalRandomNoLocation"></div>' +
|
||||||
|
'Expected result: opens successfully in InAppBrowser without locationBar.' +
|
||||||
|
'<p/> <div id="openLocalRandomToolBarBottom"></div>' +
|
||||||
|
'Expected result: opens successfully in InAppBrowser with locationBar. On iOS the toolbar is at the bottom.' +
|
||||||
|
'<p/> <div id="openLocalRandomToolBarTop"></div>' +
|
||||||
|
'Expected result: opens successfully in InAppBrowser with locationBar. On iOS the toolbar is at the top.' +
|
||||||
|
'<p/><div id="openLocalRandomToolBarTopNoLocation"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser with no locationBar. On iOS the toolbar is at the top.';
|
||||||
|
|
||||||
|
var white_listed_tests = '<h1>White Listed URL</h1>' +
|
||||||
|
'<div id="openWhiteListed"></div>' +
|
||||||
|
'Expected result: open successfully in CordovaWebView to cordova.apache.org' +
|
||||||
|
'<p/> <div id="openWhiteListedSelf"></div>' +
|
||||||
|
'Expected result: open successfully in CordovaWebView to cordova.apache.org' +
|
||||||
|
'<p/> <div id="openWhiteListedSystem"></div>' +
|
||||||
|
'Expected result: open successfully in system browser to cordova.apache.org' +
|
||||||
|
'<p/> <div id="openWhiteListedBlank"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser to cordova.apache.org' +
|
||||||
|
'<p/> <div id="openWhiteListedRandom"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser to cordova.apache.org' +
|
||||||
|
'<p/> <div id="openWhiteListedRandomNoLocation"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser to cordova.apache.org with no location bar.';
|
||||||
|
|
||||||
|
var non_white_listed_tests = '<h1>Non White Listed URL</h1>' +
|
||||||
|
'<div id="openNonWhiteListed"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser to apple.com (_self enforces whitelist).' +
|
||||||
|
'<p/> <div id="openNonWhiteListedSelf"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser to apple.com (_self enforces whitelist).' +
|
||||||
|
'<p/> <div id="openNonWhiteListedSystem"></div>' +
|
||||||
|
'Expected result: open successfully in system browser to apple.com.' +
|
||||||
|
'<p/> <div id="openNonWhiteListedBlank"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser to apple.com.' +
|
||||||
|
'<p/> <div id="openNonWhiteListedRandom"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser to apple.com.' +
|
||||||
|
'<p/> <div id="openNonWhiteListedRandomNoLocation"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser to apple.com without locationBar.';
|
||||||
|
|
||||||
|
var page_with_redirects_tests = '<h1>Page with redirect</h1>' +
|
||||||
|
'<div id="openRedirect301"></div>' +
|
||||||
|
'Expected result: should 301 and open successfully in InAppBrowser to https://www.google.co.uk.' +
|
||||||
|
'<p/> <div id="openRedirect302"></div>' +
|
||||||
|
'Expected result: should 302 and open successfully in InAppBrowser to www.zhihu.com/answer/16714076.';
|
||||||
|
|
||||||
|
var pdf_url_tests = '<h1>PDF URL</h1>' +
|
||||||
|
'<div id="openPDF"></div>' +
|
||||||
|
'Expected result: InAppBrowser opens. PDF should render on iOS.' +
|
||||||
|
'<p/> <div id="openPDFBlank"></div>' +
|
||||||
|
'Expected result: InAppBrowser opens. PDF should render on iOS.';
|
||||||
|
|
||||||
|
var invalid_url_tests = '<h1>Invalid URL</h1>' +
|
||||||
|
'<div id="openInvalidScheme"></div>' +
|
||||||
|
'Expected result: fail to load in InAppBrowser.' +
|
||||||
|
'<p/> <div id="openInvalidHost"></div>' +
|
||||||
|
'Expected result: fail to load in InAppBrowser.' +
|
||||||
|
'<p/> <div id="openInvalidMissing"></div>' +
|
||||||
|
'Expected result: fail to load in InAppBrowser (404).';
|
||||||
|
|
||||||
|
var css_js_injection_tests = '<h1>CSS / JS Injection</h1>' +
|
||||||
|
'<div id="openOriginalDocument"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser without text "Style updated from..."' +
|
||||||
|
'<p/> <div id="openCSSInjection"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser with "Style updated from file".' +
|
||||||
|
'<p/> <div id="openCSSInjectionCallback"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser with "Style updated from file", and alert dialog with text "Results verified".' +
|
||||||
|
'<p/> <div id="openCSSLiteralInjection"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser with "Style updated from literal".' +
|
||||||
|
'<p/> <div id="openCSSLiteralInjectionCallback"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser with "Style updated from literal", and alert dialog with text "Results verified".' +
|
||||||
|
'<p/> <div id="openScriptInjection"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser with text "Script file successfully injected".' +
|
||||||
|
'<p/> <div id="openScriptInjectionCallback"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser with text "Script file successfully injected" and alert dialog with the text "Results verified".' +
|
||||||
|
'<p/> <div id="openScriptLiteralInjection"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser with the text "Script literal successfully injected" .' +
|
||||||
|
'<p/> <div id="openScriptLiteralInjectionCallback"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser with the text "Script literal successfully injected" and alert dialog with the text "Results verified".';
|
||||||
|
|
||||||
|
var open_hidden_tests = '<h1>Open Hidden </h1>' +
|
||||||
|
'<div id="openHidden"></div>' +
|
||||||
|
'Expected result: no additional browser window. Alert appears with the text "background window loaded".' +
|
||||||
|
'<p/> <div id="showHidden"></div>' +
|
||||||
|
'Expected result: after first clicking on previous test "create hidden", open successfully in InAppBrowser to https://www.google.co.uk.' +
|
||||||
|
'<p/> <div id="closeHidden"></div>' +
|
||||||
|
'Expected result: no output. But click on "show hidden" again and nothing should be shown.' +
|
||||||
|
'<p/> <div id="openHiddenShow"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser to https://www.google.co.uk';
|
||||||
|
|
||||||
|
var clearing_cache_tests = '<h1>Clearing Cache</h1>' +
|
||||||
|
'<div id="openClearCache"></div>' +
|
||||||
|
'Expected result: ?' +
|
||||||
|
'<p/> <div id="openClearSessionCache"></div>' +
|
||||||
|
'Expected result: ?';
|
||||||
|
|
||||||
|
var video_tag_tests = '<h1>Video tag</h1>' +
|
||||||
|
'<div id="openRemoteVideo"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser with an embedded video that works after clicking the "play" button.';
|
||||||
|
|
||||||
|
var local_with_anchor_tag_tests = '<h1>Local with anchor tag</h1>' +
|
||||||
|
'<div id="openAnchor1"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser to the local page, scrolled to the top as normal.' +
|
||||||
|
'<p/> <div id="openAnchor2"></div>' +
|
||||||
|
'Expected result: open successfully in InAppBrowser to the local page, scrolled to the beginning of the tall div with border.';
|
||||||
|
|
||||||
|
// 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
|
||||||
|
if (window.MSApp && window.MSApp.execUnsafeLocalFunction) {
|
||||||
|
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 +
|
||||||
|
css_js_injection_tests + open_hidden_tests + clearing_cache_tests + video_tag_tests + local_with_anchor_tag_tests;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById("user-agent").textContent = navigator.userAgent;
|
||||||
|
|
||||||
|
// we are already in cdvtests directory
|
||||||
|
var basePath = 'iab-resources/';
|
||||||
|
var localhtml = basePath + 'local.html',
|
||||||
|
localpdf = basePath + 'local.pdf',
|
||||||
|
injecthtml = basePath + 'inject.html',
|
||||||
|
injectjs = isWindows ? basePath + 'inject.js' : 'inject.js',
|
||||||
|
injectcss = isWindows ? basePath + 'inject.css' : 'inject.css',
|
||||||
|
videohtml = basePath + 'video.html';
|
||||||
|
|
||||||
|
//Local
|
||||||
|
createActionButton('target=Default', function () {
|
||||||
|
doOpen(localhtml);
|
||||||
|
}, 'openLocal');
|
||||||
|
createActionButton('target=_self', function () {
|
||||||
|
doOpen(localhtml, '_self');
|
||||||
|
}, 'openLocalSelf');
|
||||||
|
createActionButton('target=_system', function () {
|
||||||
|
doOpen(localhtml, '_system');
|
||||||
|
}, 'openLocalSystem');
|
||||||
|
createActionButton('target=_blank', function () {
|
||||||
|
doOpen(localhtml, '_blank');
|
||||||
|
}, 'openLocalBlank');
|
||||||
|
createActionButton('target=Random, location=no, disallowoverscroll=yes', function () {
|
||||||
|
doOpen(localhtml, 'random_string', 'location=no, disallowoverscroll=yes');
|
||||||
|
}, 'openLocalRandomNoLocation');
|
||||||
|
createActionButton('target=Random, toolbarposition=bottom', function () {
|
||||||
|
doOpen(localhtml, 'random_string', 'toolbarposition=bottom');
|
||||||
|
}, 'openLocalRandomToolBarBottom');
|
||||||
|
createActionButton('target=Random, toolbarposition=top', function () {
|
||||||
|
doOpen(localhtml, 'random_string', 'toolbarposition=top');
|
||||||
|
}, 'openLocalRandomToolBarTop');
|
||||||
|
createActionButton('target=Random, toolbarposition=top, location=no', function () {
|
||||||
|
doOpen(localhtml, 'random_string', 'toolbarposition=top,location=no');
|
||||||
|
}, 'openLocalRandomToolBarTopNoLocation');
|
||||||
|
|
||||||
|
//White Listed
|
||||||
|
createActionButton('* target=Default', function () {
|
||||||
|
doOpen('http://cordova.apache.org');
|
||||||
|
}, 'openWhiteListed');
|
||||||
|
createActionButton('* target=_self', function () {
|
||||||
|
doOpen('http://cordova.apache.org', '_self');
|
||||||
|
}, 'openWhiteListedSelf');
|
||||||
|
createActionButton('target=_system', function () {
|
||||||
|
doOpen('http://cordova.apache.org', '_system');
|
||||||
|
}, 'openWhiteListedSystem');
|
||||||
|
createActionButton('target=_blank', function () {
|
||||||
|
doOpen('http://cordova.apache.org', '_blank');
|
||||||
|
}, 'openWhiteListedBlank');
|
||||||
|
createActionButton('target=Random', function () {
|
||||||
|
doOpen('http://cordova.apache.org', 'random_string');
|
||||||
|
}, 'openWhiteListedRandom');
|
||||||
|
createActionButton('* target=Random, no location bar', function () {
|
||||||
|
doOpen('http://cordova.apache.org', 'random_string', 'location=no');
|
||||||
|
}, 'openWhiteListedRandomNoLocation');
|
||||||
|
|
||||||
|
//Non White Listed
|
||||||
|
createActionButton('target=Default', function () {
|
||||||
|
doOpen('http://www.apple.com');
|
||||||
|
}, 'openNonWhiteListed');
|
||||||
|
createActionButton('target=_self', function () {
|
||||||
|
doOpen('http://www.apple.com', '_self');
|
||||||
|
}, 'openNonWhiteListedSelf');
|
||||||
|
createActionButton('target=_system', function () {
|
||||||
|
doOpen('http://www.apple.com', '_system');
|
||||||
|
}, 'openNonWhiteListedSystem');
|
||||||
|
createActionButton('target=_blank', function () {
|
||||||
|
doOpen('http://www.apple.com', '_blank');
|
||||||
|
}, 'openNonWhiteListedBlank');
|
||||||
|
createActionButton('target=Random', function () {
|
||||||
|
doOpen('http://www.apple.com', 'random_string');
|
||||||
|
}, 'openNonWhiteListedRandom');
|
||||||
|
createActionButton('* target=Random, no location bar', function () {
|
||||||
|
doOpen('http://www.apple.com', 'random_string', 'location=no');
|
||||||
|
}, 'openNonWhiteListedRandomNoLocation');
|
||||||
|
|
||||||
|
//Page with redirect
|
||||||
|
createActionButton('http://google.co.uk', function () {
|
||||||
|
doOpen('http://google.co.uk', 'random_string', '', 1);
|
||||||
|
}, 'openRedirect301');
|
||||||
|
createActionButton('http://goo.gl/pUFqg', function () {
|
||||||
|
doOpen('http://goo.gl/pUFqg', 'random_string', '', 2);
|
||||||
|
}, 'openRedirect302');
|
||||||
|
|
||||||
|
//PDF URL
|
||||||
|
createActionButton('Remote URL', function () {
|
||||||
|
doOpen('http://www.stluciadance.com/prospectus_file/sample.pdf');
|
||||||
|
}, 'openPDF');
|
||||||
|
createActionButton('Local URL', function () {
|
||||||
|
doOpen(localpdf, '_blank');
|
||||||
|
}, 'openPDFBlank');
|
||||||
|
|
||||||
|
//Invalid URL
|
||||||
|
createActionButton('Invalid Scheme', function () {
|
||||||
|
doOpen('x-ttp://www.invalid.com/', '_blank');
|
||||||
|
}, 'openInvalidScheme');
|
||||||
|
createActionButton('Invalid Host', function () {
|
||||||
|
doOpen('http://www.inv;alid.com/', '_blank');
|
||||||
|
}, 'openInvalidHost');
|
||||||
|
createActionButton('Missing Local File', function () {
|
||||||
|
doOpen('nonexistent.html', '_blank');
|
||||||
|
}, 'openInvalidMissing');
|
||||||
|
|
||||||
|
//CSS / JS injection
|
||||||
|
createActionButton('Original Document', function () {
|
||||||
|
doOpen(injecthtml, '_blank');
|
||||||
|
}, 'openOriginalDocument');
|
||||||
|
createActionButton('CSS File Injection', function () {
|
||||||
|
openWithStyle(injecthtml, injectcss);
|
||||||
|
}, 'openCSSInjection');
|
||||||
|
createActionButton('CSS File Injection (callback)', function () {
|
||||||
|
openWithStyle(injecthtml, injectcss, true);
|
||||||
|
}, 'openCSSInjectionCallback');
|
||||||
|
createActionButton('CSS Literal Injection', function () {
|
||||||
|
openWithStyle(injecthtml);
|
||||||
|
}, 'openCSSLiteralInjection');
|
||||||
|
createActionButton('CSS Literal Injection (callback)', function () {
|
||||||
|
openWithStyle(injecthtml, null, true);
|
||||||
|
}, 'openCSSLiteralInjectionCallback');
|
||||||
|
createActionButton('Script File Injection', function () {
|
||||||
|
openWithScript(injecthtml, injectjs);
|
||||||
|
}, 'openScriptInjection');
|
||||||
|
createActionButton('Script File Injection (callback)', function () {
|
||||||
|
openWithScript(injecthtml, injectjs, true);
|
||||||
|
}, 'openScriptInjectionCallback');
|
||||||
|
createActionButton('Script Literal Injection', function () {
|
||||||
|
openWithScript(injecthtml);
|
||||||
|
}, 'openScriptLiteralInjection');
|
||||||
|
createActionButton('Script Literal Injection (callback)', function () {
|
||||||
|
openWithScript(injecthtml, null, true);
|
||||||
|
}, 'openScriptLiteralInjectionCallback');
|
||||||
|
|
||||||
|
//Open hidden
|
||||||
|
createActionButton('Create Hidden', function () {
|
||||||
|
openHidden('https://www.google.co.uk', true);
|
||||||
|
}, 'openHidden');
|
||||||
|
createActionButton('Show Hidden', function () {
|
||||||
|
showHidden();
|
||||||
|
}, 'showHidden');
|
||||||
|
createActionButton('Close Hidden', function () {
|
||||||
|
closeHidden();
|
||||||
|
}, 'closeHidden');
|
||||||
|
createActionButton('google.co.uk Not Hidden', function () {
|
||||||
|
openHidden('https://www.google.co.uk', false);
|
||||||
|
}, 'openHiddenShow');
|
||||||
|
|
||||||
|
//Clearing cache
|
||||||
|
createActionButton('Clear Browser Cache', function () {
|
||||||
|
doOpen('https://www.google.co.uk', '_blank', 'clearcache=yes');
|
||||||
|
}, 'openClearCache');
|
||||||
|
createActionButton('Clear Session Cache', function () {
|
||||||
|
doOpen('https://www.google.co.uk', '_blank', 'clearsessioncache=yes');
|
||||||
|
}, 'openClearSessionCache');
|
||||||
|
|
||||||
|
//Video tag
|
||||||
|
createActionButton('Remote Video', function () {
|
||||||
|
doOpen(videohtml, '_blank');
|
||||||
|
}, 'openRemoteVideo');
|
||||||
|
|
||||||
|
//Local With Anchor Tag
|
||||||
|
createActionButton('Anchor1', function () {
|
||||||
|
doOpen(localhtml + '#bogusanchor', '_blank');
|
||||||
|
}, 'openAnchor1');
|
||||||
|
createActionButton('Anchor2', function () {
|
||||||
|
doOpen(localhtml + '#anchor2', '_blank');
|
||||||
|
}, 'openAnchor2');
|
||||||
|
};
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ function InAppBrowser() {
|
|||||||
|
|
||||||
InAppBrowser.prototype = {
|
InAppBrowser.prototype = {
|
||||||
_eventHandler: function (event) {
|
_eventHandler: function (event) {
|
||||||
if (event.type in this.channels) {
|
if (event && (event.type in this.channels)) {
|
||||||
this.channels[event.type].fire(event);
|
this.channels[event.type].fire(event);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -77,7 +77,7 @@ InAppBrowser.prototype = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = function(strUrl, strWindowName, strWindowFeatures) {
|
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');
|
||||||
@@ -86,10 +86,18 @@ module.exports = function(strUrl, strWindowName, strWindowFeatures) {
|
|||||||
|
|
||||||
strUrl = urlutil.makeAbsolute(strUrl);
|
strUrl = urlutil.makeAbsolute(strUrl);
|
||||||
var iab = new InAppBrowser();
|
var iab = new InAppBrowser();
|
||||||
|
|
||||||
|
callbacks = callbacks || {};
|
||||||
|
for (var callbackName in callbacks) {
|
||||||
|
iab.addEventListener(callbackName, callbacks[callbackName]);
|
||||||
|
}
|
||||||
|
|
||||||
var cb = function(eventname) {
|
var cb = function(eventname) {
|
||||||
iab._eventHandler(eventname);
|
iab._eventHandler(eventname);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
strWindowFeatures = strWindowFeatures || "";
|
||||||
|
|
||||||
exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]);
|
exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]);
|
||||||
return iab;
|
return iab;
|
||||||
};
|
};
|
||||||
@@ -108,4 +108,4 @@ var IAB = {
|
|||||||
module.exports = IAB;
|
module.exports = IAB;
|
||||||
|
|
||||||
|
|
||||||
require("cordova/windows8/commandProxy").add("InAppBrowser", module.exports);
|
require("cordova/exec/proxy").add("InAppBrowser", module.exports);
|
||||||
|
|||||||
Reference in New Issue
Block a user