From ef9ca5ad3ee121efb22f0dfceef6628805ff0c49 Mon Sep 17 00:00:00 2001 From: SomaticIT Date: Thu, 17 Oct 2013 23:01:13 +0200 Subject: [PATCH 1/7] Append Windows 8.1 proxy using x-ms-webview --- src/windows81/InAppBrowserProxy.js | 151 +++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 src/windows81/InAppBrowserProxy.js diff --git a/src/windows81/InAppBrowserProxy.js b/src/windows81/InAppBrowserProxy.js new file mode 100644 index 0000000..860f739 --- /dev/null +++ b/src/windows81/InAppBrowserProxy.js @@ -0,0 +1,151 @@ +/* + * + * 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'); + +var browserWrap, + popup, + cb; + +var IAB = { + close: function (win, lose) { + if (browserWrap) { + if (cb) cb({ type: "exit" }); + + browserWrap.parentNode.removeChild(browserWrap); + browserWrap = null; + popup = null; + cb = 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 === "_blank") { + cb = win; + if (!browserWrap) { + browserWrap = document.createElement("div"); + browserWrap.style.position = "absolute"; + browserWrap.style.width = (window.innerWidth - 80) + "px"; + browserWrap.style.height = (window.innerHeight - 80) + "px"; + browserWrap.style.borderWidth = "40px"; + browserWrap.style.borderStyle = "solid"; + browserWrap.style.borderColor = "rgba(0,0,0,0.25)"; + + browserWrap.onclick = function () { + setTimeout(function () { + IAB.close(); + }, 0); + }; + + document.body.appendChild(browserWrap); + } + + if (features.indexOf("hidden=yes") !== -1) { + browserWrap.style.display = "none"; + } + + popup = document.createElement("x-ms-webview"); + popup.style.width = (window.innerWidth - 80) + "px"; + popup.style.height = (window.innerHeight - 80) + "px"; + popup.src = strUrl; + + popup.addEventListener("MSWebViewNavigationStarting", function (e) { + win({ type: "loadstart", url: e.uri }); + }); + popup.addEventListener("MSWebViewNavigationCompleted", function (e) { + if (e.isSuccess) { + win({ type: "loadstop", url: e.uri }); + } + else { + win({ type: "loaderror", url: e.uri }); + } + }); + popup.addEventListener("MSWebViewUnviewableContentIdentified", function (e) { + win({ type: "loaderror", url: e.uri }); + }); + + window.addEventListener("resize", function () { + if (browserWrap && popup) { + browserWrap.style.width = (window.innerWidth - 80) + "px"; + browserWrap.style.height = (window.innerHeight - 80) + "px"; + + popup.style.width = (window.innerWidth - 80) + "px"; + popup.style.height = (window.innerHeight - 80) + "px"; + } + }); + + browserWrap.appendChild(popup); + } + else { + window.location = strUrl; + } + }, + + injectScriptCode: function (win, fail, args) { + var code = args[0], + hasCallback = args[1]; + + if (browserWrap && popup) { + var op = popup.invokeScriptAsync("eval", code); + op.oncomplete = function () { hasCallback && win([]); }; + op.onerror = function () { }; + op.start(); + } + // "(function(d) { var c = d.createElement('script'); c.src = %@; d.body.appendChild(c); })(document)" + }, + injectScriptFile: function (win, fail, args) { + var file = args[0], + hasCallback = args[1]; + + if (browserWrap && popup) { + 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/windows8/commandProxy").add("InAppBrowser", module.exports); From 863386398e6e595f103d593ab72c91712fcc373a Mon Sep 17 00:00:00 2001 From: SomaticIT Date: Thu, 17 Oct 2013 23:02:59 +0200 Subject: [PATCH 2/7] Append Windows 8.1 platform configuration in plugin.xml --- plugin.xml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/plugin.xml b/plugin.xml index 03cb490..0bb6616 100644 --- a/plugin.xml +++ b/plugin.xml @@ -74,6 +74,13 @@ - + + + + + + + + From 225bde271b03b39ab6bb6bac807bfae1d960f721 Mon Sep 17 00:00:00 2001 From: SomaticIT Date: Fri, 11 Jul 2014 17:06:39 +0200 Subject: [PATCH 3/7] Rename windows81 by windows8 in src directory --- src/{windows81 => windows}/InAppBrowserProxy.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/{windows81 => windows}/InAppBrowserProxy.js (100%) diff --git a/src/windows81/InAppBrowserProxy.js b/src/windows/InAppBrowserProxy.js similarity index 100% rename from src/windows81/InAppBrowserProxy.js rename to src/windows/InAppBrowserProxy.js From ac9c64964e17e66075c8b9170a61916b5ac01acb Mon Sep 17 00:00:00 2001 From: SomaticIT Date: Fri, 11 Jul 2014 21:43:37 +0200 Subject: [PATCH 4/7] Update windows proxy to be both compatible with windows 8 and 8.1 --- src/windows/InAppBrowserProxy.js | 81 ++++++++++++++++++++------------ 1 file changed, 52 insertions(+), 29 deletions(-) diff --git a/src/windows/InAppBrowserProxy.js b/src/windows/InAppBrowserProxy.js index 860f739..2bcef49 100644 --- a/src/windows/InAppBrowserProxy.js +++ b/src/windows/InAppBrowserProxy.js @@ -31,6 +31,16 @@ var browserWrap, popup, cb; +function onResize() { + if (browserWrap && popup) { + browserWrap.style.width = (window.innerWidth - 80) + "px"; + browserWrap.style.height = (window.innerHeight - 80) + "px"; + + popup.style.width = (window.innerWidth - 80) + "px"; + popup.style.height = (window.innerHeight - 80) + "px"; + } +} + var IAB = { close: function (win, lose) { if (browserWrap) { @@ -40,6 +50,8 @@ var IAB = { browserWrap = null; popup = null; cb = null; + + window.removeEventListener("resize", onResize); } }, show: function (win, lose) { @@ -51,6 +63,7 @@ var IAB = { var strUrl = args[0], target = args[1], features = args[2], + isWinJS2 = !!WinJS.Utilities.Scheduler && !!WinJS.Utilities.Scheduler.schedule, url; if (target === "_system") { @@ -81,35 +94,45 @@ var IAB = { browserWrap.style.display = "none"; } - popup = document.createElement("x-ms-webview"); + popup = document.createElement(isWinJS2 ? "x-ms-webview" : "iframe"); popup.style.width = (window.innerWidth - 80) + "px"; popup.style.height = (window.innerHeight - 80) + "px"; + popup.style.borderWidth = "0px"; popup.src = strUrl; - popup.addEventListener("MSWebViewNavigationStarting", function (e) { - win({ type: "loadstart", url: e.uri }); - }); - popup.addEventListener("MSWebViewNavigationCompleted", function (e) { - if (e.isSuccess) { - win({ type: "loadstop", url: e.uri }); - } - else { + if (isWinJS2) { + popup.addEventListener("MSWebViewNavigationStarting", function (e) { + win({ type: "loadstart", url: e.uri }); + }); + popup.addEventListener("MSWebViewNavigationCompleted", function (e) { + if (e.isSuccess) { + win({ type: "loadstop", url: e.uri }); + } + else { + win({ type: "loaderror", url: e.uri }); + } + }); + popup.addEventListener("MSWebViewUnviewableContentIdentified", function (e) { win({ type: "loaderror", url: e.uri }); - } - }); - popup.addEventListener("MSWebViewUnviewableContentIdentified", function (e) { - win({ type: "loaderror", url: e.uri }); - }); + }); + } + else { + var onError = function () { + win({ type: "loaderror", url: this.contentWindow.location }); + }; - window.addEventListener("resize", function () { - if (browserWrap && popup) { - browserWrap.style.width = (window.innerWidth - 80) + "px"; - browserWrap.style.height = (window.innerHeight - 80) + "px"; + popup.addEventListener("unload", function () { + win({ type: "loadstart", url: this.contentWindow.location }); + }); + popup.addEventListener("load", function () { + win({ type: "loadstop", url: this.contentWindow.location }); + }); - popup.style.width = (window.innerWidth - 80) + "px"; - popup.style.height = (window.innerHeight - 80) + "px"; - } - }); + popup.addEventListener("error", onError); + popup.addEventListener("abort", onError); + } + + window.addEventListener("resize", onResize); browserWrap.appendChild(popup); } @@ -120,21 +143,22 @@ var IAB = { injectScriptCode: function (win, fail, args) { var code = args[0], - hasCallback = args[1]; + hasCallback = args[1], + isWinJS2 = !!WinJS.Utilities.Scheduler && !!WinJS.Utilities.Scheduler.schedule; - if (browserWrap && popup) { + if (isWinJS2 && browserWrap && popup) { var op = popup.invokeScriptAsync("eval", code); op.oncomplete = function () { hasCallback && win([]); }; op.onerror = function () { }; op.start(); } - // "(function(d) { var c = d.createElement('script'); c.src = %@; d.body.appendChild(c); })(document)" }, injectScriptFile: function (win, fail, args) { var file = args[0], - hasCallback = args[1]; + hasCallback = args[1], + isWinJS2 = !!WinJS.Utilities.Scheduler && !!WinJS.Utilities.Scheduler.schedule; - if (browserWrap && popup) { + if (isWinJS2 && browserWrap && popup) { Windows.Storage.FileIO.readTextAsync(file).done(function (code) { var op = popup.invokeScriptAsync("eval", code); op.oncomplete = function () { hasCallback && win([]); }; @@ -147,5 +171,4 @@ var IAB = { module.exports = IAB; - -require("cordova/windows8/commandProxy").add("InAppBrowser", module.exports); +require("cordova/exec/proxy").add("InAppBrowser", module.exports); From ea6a4fc80a2bc5b1cc74964e921df8b367e5876f Mon Sep 17 00:00:00 2001 From: SomaticIT Date: Fri, 11 Jul 2014 21:48:21 +0200 Subject: [PATCH 5/7] Update doc to add Windows 8 --- doc/index.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/doc/index.md b/doc/index.md index d59cd99..1f4c823 100644 --- a/doc/index.md +++ b/doc/index.md @@ -77,6 +77,10 @@ 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`). - __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 - Amazon Fire OS @@ -84,6 +88,7 @@ instance, or the system browser. - BlackBerry 10 - Firefox OS - iOS +- Windows 8 and 8.1 - Windows Phone 7 and 8 ### Example @@ -169,6 +174,7 @@ The object returned from a call to `window.open`. - Amazon Fire OS - Android - iOS +- Windows 8 and 8.1 - Windows Phone 7 and 8 ### Quick Example @@ -199,6 +205,7 @@ The function is passed an `InAppBrowserEvent` object. - Amazon Fire OS - Android - iOS +- Windows 8 and 8.1 - Windows Phone 7 and 8 ### Quick Example @@ -222,6 +229,7 @@ The function is passed an `InAppBrowserEvent` object. - Android - Firefox OS - iOS +- Windows 8 and 8.1 - Windows Phone 7 and 8 ### Quick Example @@ -242,6 +250,7 @@ The function is passed an `InAppBrowserEvent` object. - Amazon Fire OS - Android - iOS +- Windows 8 and 8.1 ### Quick Example @@ -273,6 +282,7 @@ The function is passed an `InAppBrowserEvent` object. - Amazon Fire OS - Android - iOS +- Windows 8 and 8.1 ### Quick Example From 6e38667320cda5f5c199a5d6a038a001be491bdd Mon Sep 17 00:00:00 2001 From: SomaticIT Date: Fri, 11 Jul 2014 21:48:31 +0200 Subject: [PATCH 6/7] Update french translation --- doc/fr/index.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/doc/fr/index.md b/doc/fr/index.md index e9dc62e..7034e28 100644 --- a/doc/fr/index.md +++ b/doc/fr/index.md @@ -57,7 +57,7 @@ Ouvre une URL dans une nouvelle `InAppBrowser` instance, l'instance de navigateu 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. + * **hidden**: 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 @@ -65,7 +65,7 @@ Ouvre une URL dans une nouvelle `InAppBrowser` instance, l'instance de navigateu * **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. + * **hidden**: 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`) @@ -77,6 +77,10 @@ Ouvre une URL dans une nouvelle `InAppBrowser` instance, l'instance de navigateu * **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 : + + * **hidden**: 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 @@ -88,6 +92,7 @@ Ouvre une URL dans une nouvelle `InAppBrowser` instance, l'instance de navigateu * BlackBerry 10 * Firefox OS * iOS +* Windows 8 et 8.1 * Windows Phone 7 et 8 ### Exemple @@ -172,6 +177,7 @@ L'objet retourné par un appel à`window.open`. * Amazon Fire OS * Android * iOS +* Windows 8 et 8.1 * Windows Phone 7 et 8 ### Petit exemple @@ -203,6 +209,7 @@ L'objet retourné par un appel à`window.open`. * Amazon Fire OS * Android * iOS +* Windows 8 et 8.1 * Windows Phone 7 et 8 ### Petit exemple @@ -228,6 +235,7 @@ L'objet retourné par un appel à`window.open`. * Android * Firefox OS * iOS +* Windows 8 et 8.1 * Windows Phone 7 et 8 ### Petit exemple @@ -250,6 +258,7 @@ L'objet retourné par un appel à`window.open`. * Amazon Fire OS * Android * iOS +* Windows 8 et 8.1 ### Petit exemple @@ -281,6 +290,7 @@ L'objet retourné par un appel à`window.open`. * Amazon Fire OS * Android * iOS +* Windows 8 et 8.1 ### Petit exemple From d828197de45f724ad41135c3ca8f0767a0990582 Mon Sep 17 00:00:00 2001 From: SomaticIT Date: Fri, 11 Jul 2014 21:54:25 +0200 Subject: [PATCH 7/7] Clean plugin.xml --- plugin.xml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/plugin.xml b/plugin.xml index 4f146dd..1ee223f 100644 --- a/plugin.xml +++ b/plugin.xml @@ -36,8 +36,8 @@ - - + + @@ -65,7 +65,7 @@ - + @@ -93,7 +93,7 @@ - + @@ -186,5 +186,4 @@ -