(browser_Navigated);
- browser.Navigate(loc);
+ browser.Navigate2(loc);
+
+ if (StartHidden)
+ {
+ browser.Visibility = Visibility.Collapsed;
+ }
+
//browser.IsGeolocationEnabled = opts.isGeolocationEnabled;
grid.Children.Add(browser);
}
@@ -156,6 +345,11 @@ namespace WPCordovaClassLib.Cordova.Commands
bar.Buttons.Add(closeBtn);
page.ApplicationBar = bar;
+ bar.IsVisible = !StartHidden;
+ AppBar = bar;
+
+ page.BackKeyPress += page_BackKeyPress;
+
}
}
@@ -163,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)
{
@@ -195,7 +406,7 @@ namespace WPCordovaClassLib.Cordova.Commands
{
#if WP8
browser.GoBack();
-#else
+#else
browser.InvokeScript("execScript", "history.back();");
#endif
}
@@ -230,13 +441,15 @@ namespace WPCordovaClassLib.Cordova.Commands
grid.Children.Remove(browser);
}
page.ApplicationBar = null;
+ page.BackKeyPress -= page_BackKeyPress;
}
}
+
browser = null;
string message = "{\"type\":\"exit\"}";
PluginResult result = new PluginResult(PluginResult.Status.OK, message);
result.KeepCallback = false;
- this.DispatchCommandResult(result);
+ this.DispatchCommandResult(result, NavigationCallbackId);
});
}
}
@@ -251,27 +464,52 @@ namespace WPCordovaClassLib.Cordova.Commands
}
#endif
- string message = "{\"type\":\"loadstop\", \"url\":\"" + e.Uri.AbsoluteUri + "\"}";
+ string message = "{\"type\":\"loadstop\", \"url\":\"" + e.Uri.OriginalString + "\"}";
PluginResult result = new PluginResult(PluginResult.Status.OK, message);
result.KeepCallback = true;
- this.DispatchCommandResult(result);
+ this.DispatchCommandResult(result, NavigationCallbackId);
}
void browser_NavigationFailed(object sender, System.Windows.Navigation.NavigationFailedEventArgs e)
{
- string message = "{\"type\":\"error\",\"url\":\"" + e.Uri.AbsoluteUri + "\"}";
+ string message = "{\"type\":\"error\",\"url\":\"" + e.Uri.OriginalString + "\"}";
PluginResult result = new PluginResult(PluginResult.Status.ERROR, message);
result.KeepCallback = true;
- this.DispatchCommandResult(result);
+ this.DispatchCommandResult(result, NavigationCallbackId);
}
void browser_Navigating(object sender, NavigatingEventArgs e)
{
- string message = "{\"type\":\"loadstart\",\"url\":\"" + e.Uri.AbsoluteUri + "\"}";
+ string message = "{\"type\":\"loadstart\",\"url\":\"" + e.Uri.OriginalString + "\"}";
PluginResult result = new PluginResult(PluginResult.Status.OK, message);
result.KeepCallback = true;
- this.DispatchCommandResult(result);
+ this.DispatchCommandResult(result, NavigationCallbackId);
}
}
+
+ internal static class WebBrowserExtensions
+ {
+ ///
+ /// Improved method to initiate request to the provided URI. Supports 'data:text/html' urls.
+ ///
+ /// The browser instance
+ /// The requested uri
+ 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);
+ }
+ }
+ }
}
diff --git a/test/.DS_Store b/test/.DS_Store
deleted file mode 100644
index 5008ddf..0000000
Binary files a/test/.DS_Store and /dev/null differ
diff --git a/test/cordova-incl.js b/test/cordova-incl.js
deleted file mode 100644
index dbcd1a6..0000000
--- a/test/cordova-incl.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-var PLAT;
-if (/Android/.exec(navigator.userAgent)) {
- PLAT = 'android';
-} else if (/(iPad)|(iPhone)|(iPod)/.exec(navigator.userAgent)) {
- PLAT = 'ios';
-} else if (/(BB10)|(PlayBook)|(BlackBerry)/.exec(navigator.userAgent)) {
- PLAT = 'blackberry';
-}
-
-var scripts = document.getElementsByTagName('script');
-var currentPath = scripts[scripts.length - 1].src;
-var platformCordovaPath = currentPath.replace("cordova-incl.js", "cordova." + PLAT + ".js");
-var normalCordovaPath = currentPath.replace("cordova-incl.js", "cordova.js");
-var cordovaPath = normalCordovaPath;
-
-if (PLAT) {
- // XHR to local file is an error on some platforms, windowsphone for one
- try {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", platformCordovaPath, false);
- xhr.onreadystatechange = function() {
-
- if (this.readyState == this.DONE && this.responseText.length > 0) {
- if(parseInt(this.status) >= 400){
- cordovaPath = normalCordovaPath;
- }else{
- cordovaPath = platformCordovaPath;
- }
- }
- };
- xhr.send(null);
- }
- catch(e){
- cordovaPath = normalCordovaPath;
- } // access denied!
-}
-
-if (!window._doNotWriteCordovaScript) {
- document.write('');
-}
-
-function backHome() {
- if (window.device && device.platform && device.platform.toLowerCase() == 'android') {
- navigator.app.backHistory();
- }
- else {
- window.history.go(-1);
- }
-}
diff --git a/test/inappbrowser/index.html b/test/inappbrowser/index.html
deleted file mode 100644
index dbc094d..0000000
--- a/test/inappbrowser/index.html
+++ /dev/null
@@ -1,258 +0,0 @@
-
-
-
-
-
-
-
-
- Cordova Mobile Spec
-
-
-
-
-
-
-
-
- InAppBrowser
-
- Make sure http://www.google.com is white listed.
- Make sure http://www.apple.com is not in the white list. In iOS, starred * tests will leave the app with no way to return.
-
User-Agent:
-
- Back
- Local URL
- Default: CordovaWebView
- Target=Self: CordovaWebView
- Target=System: Error
- Target=Blank: InAppBrowser
- Target=Random: InAppBrowser
- Target=Random, no location bar: InAppBrowser
- White Listed URL
- Default: CordovaWebView*
- Target=Self: CordovaWebView*
- Target=System: System Browser
- Target=Blank: InAppBrowser
- Target=Random: InAppBrowser
- Target=Random, no location bar: InAppBrowser
- Non White Listed URL
- Default: InAppBrowser
- Target=Self: InAppBrowser
- Target=System: System
- Target=Blank: InAppBrowser
- Target=Random: InAppBrowser
- Target=Random, no location bar: InAppBrowser
- Page with redirect
- http://google.com (should 301)
- http://www.zhihu.com/answer/16714076 (should 302)
- PDF URL
- Remote URL
- Local URL
- INVALID URL
- Invalid Scheme
- Invalid Host
- Missing File
- CSS / JS Injection
- Original Document
- CSS File Injection
- CSS File Injection (CB)
- CSS Literal Injection
- CSS Literal Injection (CB)
- Script File Injection
- Script File Injection (CB)
- Script Literal Injection
- Script Literal Injection (CB)
- Open Hidden
- google.com hidden
- show hidden
- close hidden
- google.com not hidden
-
Back
-
-
diff --git a/test/inappbrowser/inject.css b/test/inappbrowser/inject.css
deleted file mode 100644
index 3f6e41c..0000000
--- a/test/inappbrowser/inject.css
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * 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;
-}
diff --git a/test/inappbrowser/inject.html b/test/inappbrowser/inject.html
deleted file mode 100644
index 0f1efdd..0000000
--- a/test/inappbrowser/inject.html
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
-
-
-
-
-
- Cordova Mobile Spec
-
-
-
-
- Style updated from file
- Style updated from literal
-
-
-
diff --git a/test/inappbrowser/inject.js b/test/inappbrowser/inject.js
deleted file mode 100644
index 6f25493..0000000
--- a/test/inappbrowser/inject.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * 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";
diff --git a/test/inappbrowser/local.html b/test/inappbrowser/local.html
deleted file mode 100644
index d5edbf9..0000000
--- a/test/inappbrowser/local.html
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
-
- Cordova Mobile Spec
-
-
-
-
- InAppBrowser - Local URL
-
- You have successfully loaded a local URL
-
- User-Agent =
-
-
-
-
-
Back
-
-
-
diff --git a/test/inappbrowser/local.pdf b/test/inappbrowser/local.pdf
deleted file mode 100644
index b54f1b7..0000000
Binary files a/test/inappbrowser/local.pdf and /dev/null differ
diff --git a/test/index.html b/test/index.html
deleted file mode 100644
index 2c5447b..0000000
--- a/test/index.html
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-
-
-
-
-
-
- Cordova Mobile Spec
-
-
-
-
-
-
- Apache Cordova Tests
-
-
Platform:
- Version:
- UUID:
- Name:
- Model:
- Width: , Height:
- , Color Depth:
- User-Agent:
-
- Automatic Test
- Accelerometer
- Audio Play/Record
- Battery
- Camera
- Compass
- Contacts
- Events
- Location
- Lazy Loading of cordova-incl.js
- Misc Content
- Network
- Notification
- Splashscreen
- Web SQL
- Local Storage
- Benchmarks
- In App Browser
-
-
diff --git a/test/main.js b/test/main.js
deleted file mode 100644
index 66c1bd3..0000000
--- a/test/main.js
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-var deviceInfo = function() {
- document.getElementById("platform").innerHTML = device.platform;
- document.getElementById("version").innerHTML = device.version;
- document.getElementById("uuid").innerHTML = device.uuid;
- document.getElementById("name").innerHTML = device.name;
- document.getElementById("model").innerHTML = device.model;
- document.getElementById("width").innerHTML = screen.width;
- document.getElementById("height").innerHTML = screen.height;
- document.getElementById("colorDepth").innerHTML = screen.colorDepth;
-};
-
-var getLocation = function() {
- var suc = function(p) {
- alert(p.coords.latitude + " " + p.coords.longitude);
- };
- var locFail = function() {
- };
- navigator.geolocation.getCurrentPosition(suc, locFail);
-};
-
-var beep = function() {
- navigator.notification.beep(2);
-};
-
-var vibrate = function() {
- navigator.notification.vibrate(0);
-};
-
-function roundNumber(num) {
- var dec = 3;
- var result = Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
- return result;
-}
-
-var accelerationWatch = null;
-
-function updateAcceleration(a) {
- document.getElementById('x').innerHTML = roundNumber(a.x);
- document.getElementById('y').innerHTML = roundNumber(a.y);
- document.getElementById('z').innerHTML = roundNumber(a.z);
-}
-
-var toggleAccel = function() {
- if (accelerationWatch !== null) {
- navigator.accelerometer.clearWatch(accelerationWatch);
- updateAcceleration({
- x : "",
- y : "",
- z : ""
- });
- accelerationWatch = null;
- } else {
- var options = {};
- options.frequency = 1000;
- accelerationWatch = navigator.accelerometer.watchAcceleration(
- updateAcceleration, function(ex) {
- alert("accel fail (" + ex.name + ": " + ex.message + ")");
- }, options);
- }
-};
-
-var preventBehavior = function(e) {
- e.preventDefault();
-};
-
-function dump_pic(data) {
- var viewport = document.getElementById('viewport');
- console.log(data);
- viewport.style.display = "";
- viewport.style.position = "absolute";
- viewport.style.top = "10px";
- viewport.style.left = "10px";
- document.getElementById("test_img").src = "data:image/jpeg;base64," + data;
-}
-
-function fail(msg) {
- alert(msg);
-}
-
-function show_pic() {
- navigator.camera.getPicture(dump_pic, fail, {
- quality : 50
- });
-}
-
-function close() {
- var viewport = document.getElementById('viewport');
- viewport.style.position = "relative";
- viewport.style.display = "none";
-}
-
-// This is just to do this.
-function readFile() {
- navigator.file.read('/sdcard/cordova.txt', fail, fail);
-}
-
-function writeFile() {
- navigator.file.write('foo.txt', "This is a test of writing to a file",
- fail, fail);
-}
-
-function contacts_success(contacts) {
- alert(contacts.length
- + ' contacts returned.'
- + (contacts[2] && contacts[2].name ? (' Third contact is ' + contacts[2].name.formatted)
- : ''));
-}
-
-function get_contacts() {
- var obj = new ContactFindOptions();
- obj.filter = "";
- obj.multiple = true;
- obj.limit = 5;
- navigator.service.contacts.find(
- [ "displayName", "name" ], contacts_success,
- fail, obj);
-}
-
-var networkReachableCallback = function(reachability) {
- // There is no consistency on the format of reachability
- var networkState = reachability.code || reachability;
-
- var currentState = {};
- currentState[NetworkStatus.NOT_REACHABLE] = 'No network connection';
- currentState[NetworkStatus.REACHABLE_VIA_CARRIER_DATA_NETWORK] = 'Carrier data connection';
- currentState[NetworkStatus.REACHABLE_VIA_WIFI_NETWORK] = 'WiFi connection';
-
- confirm("Connection type:\n" + currentState[networkState]);
-};
-
-function check_network() {
- navigator.network.isReachable("www.mobiledevelopersolutions.com",
- networkReachableCallback, {});
-}
-
-function init() {
- // the next line makes it impossible to see Contacts on the HTC Evo since it
- // doesn't have a scroll button
- // document.addEventListener("touchmove", preventBehavior, false);
- document.addEventListener("deviceready", deviceInfo, true);
- document.getElementById("user-agent").textContent = navigator.userAgent;
-}
diff --git a/test/master.css b/test/master.css
deleted file mode 100644
index e93c937..0000000
--- a/test/master.css
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
- body {
- background:#222 none repeat scroll 0 0;
- color:#666;
- font-family:Helvetica;
- font-size:72%;
- line-height:1.5em;
- margin:0;
- border-top:1px solid #393939;
- }
-
- #info{
- background:#ffa;
- border: 1px solid #ffd324;
- -webkit-border-radius: 5px;
- border-radius: 5px;
- clear:both;
- margin:15px 6px 0;
- min-width:295px;
- max-width:97%;
- padding:4px 0px 2px 10px;
- word-wrap:break-word;
- margin-bottom:10px;
- display:inline-block;
- min-height: 160px;
- max-height: 300px;
- overflow: auto;
- -webkit-overflow-scrolling: touch;
- }
-
- #info > h4{
- font-size:.95em;
- margin:5px 0;
- }
-
- #stage.theme{
- padding-top:3px;
- }
-
- /* Definition List */
- #stage.theme > dl{
- padding-top:10px;
- clear:both;
- margin:0;
- list-style-type:none;
- padding-left:10px;
- overflow:auto;
- }
-
- #stage.theme > dl > dt{
- font-weight:bold;
- float:left;
- margin-left:5px;
- }
-
- #stage.theme > dl > dd{
- width:45px;
- float:left;
- color:#a87;
- font-weight:bold;
- }
-
- /* Content Styling */
- #stage.theme > h1, #stage.theme > h2, #stage.theme > p{
- margin:1em 0 .5em 13px;
- }
-
- #stage.theme > h1{
- color:#eee;
- font-size:1.6em;
- text-align:center;
- margin:0;
- margin-top:15px;
- padding:0;
- }
-
- #stage.theme > h2{
- clear:both;
- margin:0;
- padding:3px;
- font-size:1em;
- text-align:center;
- }
-
- /* Stage Buttons */
- #stage.theme .btn{
- border: 1px solid #555;
- -webkit-border-radius: 5px;
- border-radius: 5px;
- text-align:center;
- display:inline-block;
- background:#444;
- width:150px;
- color:#9ab;
- font-size:1.1em;
- text-decoration:none;
- padding:1.2em 0;
- margin:3px 0px 3px 5px;
- }
-
- #stage.theme .large{
- width:308px;
- padding:1.2em 0;
- }
-
- #stage.theme .wide{
- width:100%;
- padding:1.2em 0;
- }
-
- #stage.theme .backBtn{
- border: 1px solid #555;
- -webkit-border-radius: 5px;
- border-radius: 5px;
- text-align:center;
- display:block;
- float:right;
- background:#666;
- width:75px;
- color:#9ab;
- font-size:1.1em;
- text-decoration:none;
- padding:1.2em 0;
- margin:3px 5px 3px 5px;
- }
-
- #stage.theme .input{
- border: 1px solid #555;
- -webkit-border-radius: 5px;
- border-radius: 5px;
- text-align:center;
- display:block;
- float:light;
- background:#888;
- color:#9cd;
- font-size:1.1em;
- text-decoration:none;
- padding:1.2em 0;
- margin:3px 0px 3px 5px;
- }
-
- #stage.theme .numeric{
- width:100%;
- }
diff --git a/www/InAppBrowser.js b/www/InAppBrowser.js
index 5da53fd..3535b6f 100644
--- a/www/InAppBrowser.js
+++ b/www/InAppBrowser.js
@@ -22,6 +22,7 @@
var exec = require('cordova/exec');
var channel = require('cordova/channel');
var modulemapper = require('cordova/modulemapper');
+var urlutil = require('cordova/urlutil');
function InAppBrowser() {
this.channels = {
@@ -77,17 +78,20 @@ InAppBrowser.prototype = {
};
module.exports = function(strUrl, strWindowName, strWindowFeatures) {
- var iab = new InAppBrowser();
- var cb = function(eventname) {
- iab._eventHandler(eventname);
- };
-
// Don't catch calls that write to existing frames (e.g. named iframes).
if (window.frames && window.frames[strWindowName]) {
var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open');
return origOpenFunc.apply(window, arguments);
}
+ strUrl = urlutil.makeAbsolute(strUrl);
+ var iab = new InAppBrowser();
+ var cb = function(eventname) {
+ iab._eventHandler(eventname);
+ };
+
+ strWindowFeatures = strWindowFeatures || "";
+
exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]);
return iab;
};
diff --git a/www/windows8/InAppBrowserProxy.js b/www/windows8/InAppBrowserProxy.js
index d173778..944284e 100644
--- a/www/windows8/InAppBrowserProxy.js
+++ b/www/windows8/InAppBrowserProxy.js
@@ -108,4 +108,4 @@ var IAB = {
module.exports = IAB;
-require("cordova/windows8/commandProxy").add("InAppBrowser", module.exports);
+require("cordova/exec/proxy").add("InAppBrowser", module.exports);