CB-12895 : added eslint and removed jshint
This commit is contained in:
parent
7611645469
commit
902427525f
10
.eslintrc.yml
Normal file
10
.eslintrc.yml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
root: true
|
||||||
|
extends: semistandard
|
||||||
|
rules:
|
||||||
|
indent:
|
||||||
|
- error
|
||||||
|
- 4
|
||||||
|
camelcase: off
|
||||||
|
padded-blocks: off
|
||||||
|
operator-linebreak: off
|
||||||
|
no-throw-literal: off
|
16
.jshintrc
16
.jshintrc
@ -1,16 +0,0 @@
|
|||||||
{
|
|
||||||
"browser": true
|
|
||||||
, "devel": true
|
|
||||||
, "bitwise": true
|
|
||||||
, "undef": true
|
|
||||||
, "trailing": true
|
|
||||||
, "quotmark": false
|
|
||||||
, "indent": 4
|
|
||||||
, "unused": "vars"
|
|
||||||
, "latedef": "nofunc"
|
|
||||||
, "globals": {
|
|
||||||
"module": false,
|
|
||||||
"exports": false,
|
|
||||||
"require": false
|
|
||||||
}
|
|
||||||
}
|
|
12
package.json
12
package.json
@ -44,8 +44,8 @@
|
|||||||
"cordova-firefoxos"
|
"cordova-firefoxos"
|
||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "npm run jshint",
|
"test": "npm run eslint",
|
||||||
"jshint": "node node_modules/jshint/bin/jshint www && node node_modules/jshint/bin/jshint src && node node_modules/jshint/bin/jshint tests"
|
"eslint": "node node_modules/eslint/bin/eslint www && node node_modules/eslint/bin/eslint src && node node_modules/eslint/bin/eslint tests"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"cordovaDependencies": {
|
"cordovaDependencies": {
|
||||||
@ -60,6 +60,12 @@
|
|||||||
"author": "Apache Software Foundation",
|
"author": "Apache Software Foundation",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"jshint": "^2.6.0"
|
"eslint": "^4.0.0",
|
||||||
|
"eslint-config-semistandard": "^11.0.0",
|
||||||
|
"eslint-config-standard": "^10.2.1",
|
||||||
|
"eslint-plugin-import": "^2.3.0",
|
||||||
|
"eslint-plugin-node": "^5.0.0",
|
||||||
|
"eslint-plugin-promise": "^3.5.0",
|
||||||
|
"eslint-plugin-standard": "^3.0.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,43 +29,43 @@ var browserWrap,
|
|||||||
forwardButton,
|
forwardButton,
|
||||||
closeButton;
|
closeButton;
|
||||||
|
|
||||||
function attachNavigationEvents(element, callback) {
|
function attachNavigationEvents (element, callback) {
|
||||||
var onError = function () {
|
var onError = function () {
|
||||||
try {
|
try {
|
||||||
callback({ type: "loaderror", url: this.contentWindow.location.href}, {keepCallback: true});
|
callback({ type: 'loaderror', url: this.contentWindow.location.href }, {keepCallback: true}); // eslint-disable-line standard/no-callback-literal
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
// blocked by CORS :\
|
// blocked by CORS :\
|
||||||
callback({ type: "loaderror", url: null}, {keepCallback: true});
|
callback({ type: 'loaderror', url: null }, {keepCallback: true}); // eslint-disable-line standard/no-callback-literal
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
element.addEventListener("pageshow", function () {
|
element.addEventListener('pageshow', function () {
|
||||||
try {
|
try {
|
||||||
callback({ type: "loadstart", url: this.contentWindow.location.href}, {keepCallback: true});
|
callback({ type: 'loadstart', url: this.contentWindow.location.href }, {keepCallback: true}); // eslint-disable-line standard/no-callback-literal
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
// blocked by CORS :\
|
// blocked by CORS :\
|
||||||
callback({ type: "loadstart", url: null}, {keepCallback: true});
|
callback({ type: 'loadstart', url: null }, {keepCallback: true}); // eslint-disable-line standard/no-callback-literal
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
element.addEventListener("load", function () {
|
element.addEventListener('load', function () {
|
||||||
try {
|
try {
|
||||||
callback({ type: "loadstop", url: this.contentWindow.location.href}, {keepCallback: true});
|
callback({ type: 'loadstop', url: this.contentWindow.location.href }, {keepCallback: true}); // eslint-disable-line standard/no-callback-literal
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
// blocked by CORS :\
|
// blocked by CORS :\
|
||||||
callback({ type: "loadstop", url: null}, {keepCallback: true});
|
callback({ type: 'loadstop', url: null }, {keepCallback: true}); // eslint-disable-line standard/no-callback-literal
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
element.addEventListener("error", onError);
|
element.addEventListener('error', onError);
|
||||||
element.addEventListener("abort", onError);
|
element.addEventListener('abort', onError);
|
||||||
}
|
}
|
||||||
|
|
||||||
var IAB = {
|
var IAB = {
|
||||||
close: function (win, lose) {
|
close: function (win, lose) {
|
||||||
if (browserWrap) {
|
if (browserWrap) {
|
||||||
// use the "open" function callback so that the exit event is fired properly
|
// use the "open" function callback so that the exit event is fired properly
|
||||||
if (IAB._win) IAB._win({ type: "exit" });
|
if (IAB._win) IAB._win({ type: 'exit' });
|
||||||
|
|
||||||
browserWrap.parentNode.removeChild(browserWrap);
|
browserWrap.parentNode.removeChild(browserWrap);
|
||||||
browserWrap = null;
|
browserWrap = null;
|
||||||
@ -75,34 +75,34 @@ var IAB = {
|
|||||||
|
|
||||||
show: function (win, lose) {
|
show: function (win, lose) {
|
||||||
if (browserWrap) {
|
if (browserWrap) {
|
||||||
browserWrap.style.display = "block";
|
browserWrap.style.display = 'block';
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
open: function (win, lose, args) {
|
open: function (win, lose, args) {
|
||||||
var strUrl = args[0],
|
var strUrl = args[0];
|
||||||
target = args[1],
|
var target = args[1];
|
||||||
features = args[2];
|
var features = args[2];
|
||||||
|
|
||||||
IAB._win = win;
|
IAB._win = win;
|
||||||
|
|
||||||
if (target === "_self" || !target) {
|
if (target === '_self' || !target) {
|
||||||
window.location = strUrl;
|
window.location = strUrl;
|
||||||
} else if (target === "_system") {
|
} else if (target === '_system') {
|
||||||
modulemapper.getOriginalSymbol(window, 'window.open').call(window, strUrl, "_blank");
|
modulemapper.getOriginalSymbol(window, 'window.open').call(window, strUrl, '_blank');
|
||||||
} else {
|
} else {
|
||||||
// "_blank" or anything else
|
// "_blank" or anything else
|
||||||
if (!browserWrap) {
|
if (!browserWrap) {
|
||||||
browserWrap = document.createElement("div");
|
browserWrap = document.createElement('div');
|
||||||
browserWrap.style.position = "absolute";
|
browserWrap.style.position = 'absolute';
|
||||||
browserWrap.style.top = "0";
|
browserWrap.style.top = '0';
|
||||||
browserWrap.style.left = "0";
|
browserWrap.style.left = '0';
|
||||||
browserWrap.style.boxSizing = "border-box";
|
browserWrap.style.boxSizing = 'border-box';
|
||||||
browserWrap.style.borderWidth = "40px";
|
browserWrap.style.borderWidth = '40px';
|
||||||
browserWrap.style.width = "100vw";
|
browserWrap.style.width = '100vw';
|
||||||
browserWrap.style.height = "100vh";
|
browserWrap.style.height = '100vh';
|
||||||
browserWrap.style.borderStyle = "solid";
|
browserWrap.style.borderStyle = 'solid';
|
||||||
browserWrap.style.borderColor = "rgba(0,0,0,0.25)";
|
browserWrap.style.borderColor = 'rgba(0,0,0,0.25)';
|
||||||
|
|
||||||
browserWrap.onclick = function () {
|
browserWrap.onclick = function () {
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
@ -113,71 +113,68 @@ var IAB = {
|
|||||||
document.body.appendChild(browserWrap);
|
document.body.appendChild(browserWrap);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (features.indexOf("hidden=yes") !== -1) {
|
if (features.indexOf('hidden=yes') !== -1) {
|
||||||
browserWrap.style.display = "none";
|
browserWrap.style.display = 'none';
|
||||||
}
|
}
|
||||||
|
|
||||||
popup = document.createElement("iframe");
|
popup = document.createElement('iframe');
|
||||||
popup.style.borderWidth = "0px";
|
popup.style.borderWidth = '0px';
|
||||||
popup.style.width = "100%";
|
popup.style.width = '100%';
|
||||||
|
|
||||||
browserWrap.appendChild(popup);
|
browserWrap.appendChild(popup);
|
||||||
|
|
||||||
if (features.indexOf("location=yes") !== -1 || features.indexOf("location") === -1) {
|
if (features.indexOf('location=yes') !== -1 || features.indexOf('location') === -1) {
|
||||||
popup.style.height = "calc(100% - 60px)";
|
popup.style.height = 'calc(100% - 60px)';
|
||||||
popup.style.marginBottom = "-4px";
|
popup.style.marginBottom = '-4px';
|
||||||
|
|
||||||
navigationButtonsDiv = document.createElement("div");
|
navigationButtonsDiv = document.createElement('div');
|
||||||
navigationButtonsDiv.style.height = "60px";
|
navigationButtonsDiv.style.height = '60px';
|
||||||
navigationButtonsDiv.style.backgroundColor = "#404040";
|
navigationButtonsDiv.style.backgroundColor = '#404040';
|
||||||
navigationButtonsDiv.style.zIndex = "999";
|
navigationButtonsDiv.style.zIndex = '999';
|
||||||
navigationButtonsDiv.onclick = function (e) {
|
navigationButtonsDiv.onclick = function (e) {
|
||||||
e.cancelBubble = true;
|
e.cancelBubble = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
navigationButtonsDivInner = document.createElement("div");
|
navigationButtonsDivInner = document.createElement('div');
|
||||||
navigationButtonsDivInner.style.paddingTop = "10px";
|
navigationButtonsDivInner.style.paddingTop = '10px';
|
||||||
navigationButtonsDivInner.style.height = "50px";
|
navigationButtonsDivInner.style.height = '50px';
|
||||||
navigationButtonsDivInner.style.width = "160px";
|
navigationButtonsDivInner.style.width = '160px';
|
||||||
navigationButtonsDivInner.style.margin = "0 auto";
|
navigationButtonsDivInner.style.margin = '0 auto';
|
||||||
navigationButtonsDivInner.style.backgroundColor = "#404040";
|
navigationButtonsDivInner.style.backgroundColor = '#404040';
|
||||||
navigationButtonsDivInner.style.zIndex = "999";
|
navigationButtonsDivInner.style.zIndex = '999';
|
||||||
navigationButtonsDivInner.onclick = function (e) {
|
navigationButtonsDivInner.onclick = function (e) {
|
||||||
e.cancelBubble = true;
|
e.cancelBubble = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
backButton = document.createElement('button');
|
||||||
|
backButton.style.width = '40px';
|
||||||
|
backButton.style.height = '40px';
|
||||||
|
backButton.style.borderRadius = '40px';
|
||||||
|
|
||||||
backButton = document.createElement("button");
|
backButton.innerHTML = '←';
|
||||||
backButton.style.width = "40px";
|
backButton.addEventListener('click', function (e) {
|
||||||
backButton.style.height = "40px";
|
if (popup.canGoBack) { popup.goBack(); }
|
||||||
backButton.style.borderRadius = "40px";
|
|
||||||
|
|
||||||
backButton.innerHTML = "←";
|
|
||||||
backButton.addEventListener("click", function (e) {
|
|
||||||
if (popup.canGoBack)
|
|
||||||
popup.goBack();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
forwardButton = document.createElement("button");
|
forwardButton = document.createElement('button');
|
||||||
forwardButton.style.marginLeft = "20px";
|
forwardButton.style.marginLeft = '20px';
|
||||||
forwardButton.style.width = "40px";
|
forwardButton.style.width = '40px';
|
||||||
forwardButton.style.height = "40px";
|
forwardButton.style.height = '40px';
|
||||||
forwardButton.style.borderRadius = "40px";
|
forwardButton.style.borderRadius = '40px';
|
||||||
|
|
||||||
forwardButton.innerHTML = "→";
|
forwardButton.innerHTML = '→';
|
||||||
forwardButton.addEventListener("click", function (e) {
|
forwardButton.addEventListener('click', function (e) {
|
||||||
if (popup.canGoForward)
|
if (popup.canGoForward) { popup.goForward(); }
|
||||||
popup.goForward();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
closeButton = document.createElement("button");
|
closeButton = document.createElement('button');
|
||||||
closeButton.style.marginLeft = "20px";
|
closeButton.style.marginLeft = '20px';
|
||||||
closeButton.style.width = "40px";
|
closeButton.style.width = '40px';
|
||||||
closeButton.style.height = "40px";
|
closeButton.style.height = '40px';
|
||||||
closeButton.style.borderRadius = "40px";
|
closeButton.style.borderRadius = '40px';
|
||||||
|
|
||||||
closeButton.innerHTML = "✖";
|
closeButton.innerHTML = '✖';
|
||||||
closeButton.addEventListener("click", function (e) {
|
closeButton.addEventListener('click', function (e) {
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
IAB.close();
|
IAB.close();
|
||||||
}, 0);
|
}, 0);
|
||||||
@ -194,7 +191,7 @@ var IAB = {
|
|||||||
|
|
||||||
browserWrap.appendChild(navigationButtonsDiv);
|
browserWrap.appendChild(navigationButtonsDiv);
|
||||||
} else {
|
} else {
|
||||||
popup.style.height = "100%";
|
popup.style.height = '100%';
|
||||||
}
|
}
|
||||||
|
|
||||||
// start listening for navigation events
|
// start listening for navigation events
|
||||||
@ -205,8 +202,8 @@ var IAB = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
injectScriptCode: function (win, fail, args) {
|
injectScriptCode: function (win, fail, args) {
|
||||||
var code = args[0],
|
var code = args[0];
|
||||||
hasCallback = args[1];
|
var hasCallback = args[1];
|
||||||
|
|
||||||
if (browserWrap && popup) {
|
if (browserWrap && popup) {
|
||||||
try {
|
try {
|
||||||
@ -214,7 +211,7 @@ var IAB = {
|
|||||||
if (hasCallback) {
|
if (hasCallback) {
|
||||||
win([]);
|
win([]);
|
||||||
}
|
}
|
||||||
} catch(e) {
|
} catch (e) {
|
||||||
console.error('Error occured while trying to injectScriptCode: ' + JSON.stringify(e));
|
console.error('Error occured while trying to injectScriptCode: ' + JSON.stringify(e));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -247,4 +244,4 @@ var IAB = {
|
|||||||
|
|
||||||
module.exports = IAB;
|
module.exports = IAB;
|
||||||
|
|
||||||
require("cordova/exec/proxy").add("InAppBrowser", module.exports);
|
require('cordova/exec/proxy').add('InAppBrowser', module.exports);
|
||||||
|
@ -32,7 +32,7 @@ var IABExecs = {
|
|||||||
if (browserWrap) {
|
if (browserWrap) {
|
||||||
browserWrap.parentNode.removeChild(browserWrap);
|
browserWrap.parentNode.removeChild(browserWrap);
|
||||||
browserWrap = null;
|
browserWrap = null;
|
||||||
if (typeof(win) == "function") win({type:'exit'});
|
if (typeof (win) === 'function') win({type: 'exit'});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -48,17 +48,17 @@ var IABExecs = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
open: function (win, lose, args) {
|
open: function (win, lose, args) {
|
||||||
var strUrl = args[0],
|
var strUrl = args[0];
|
||||||
target = args[1],
|
var target = args[1];
|
||||||
features_string = args[2] || "location=yes", //location=yes is default
|
var features_string = args[2] || 'location=yes'; // location=yes is default
|
||||||
features = {};
|
var features = {};
|
||||||
|
|
||||||
var features_list = features_string.split(',');
|
var features_list = features_string.split(',');
|
||||||
features_list.forEach(function(feature) {
|
features_list.forEach(function (feature) {
|
||||||
var tup = feature.split('=');
|
var tup = feature.split('=');
|
||||||
if (tup[1] == 'yes') {
|
if (tup[1] === 'yes') {
|
||||||
tup[1] = true;
|
tup[1] = true;
|
||||||
} else if (tup[1] == 'no') {
|
} else if (tup[1] === 'no') {
|
||||||
tup[1] = false;
|
tup[1] = false;
|
||||||
} else {
|
} else {
|
||||||
var number = parseInt(tup[1]);
|
var number = parseInt(tup[1]);
|
||||||
@ -68,8 +68,7 @@ var IABExecs = {
|
|||||||
}
|
}
|
||||||
features[tup[0]] = tup[1];
|
features[tup[0]] = tup[1];
|
||||||
});
|
});
|
||||||
|
function updateIframeSizeNoLocation () {
|
||||||
function updateIframeSizeNoLocation() {
|
|
||||||
browserWrap.style.width = window.innerWidth + 'px';
|
browserWrap.style.width = window.innerWidth + 'px';
|
||||||
browserWrap.style.height = window.innerHeight + 'px';
|
browserWrap.style.height = window.innerHeight + 'px';
|
||||||
browserWrap.style.zIndex = '999999999';
|
browserWrap.style.zIndex = '999999999';
|
||||||
@ -117,7 +116,7 @@ var IABExecs = {
|
|||||||
|
|
||||||
var checkForwardBackward = function () {
|
var checkForwardBackward = function () {
|
||||||
var backReq = browserElem.getCanGoBack();
|
var backReq = browserElem.getCanGoBack();
|
||||||
backReq.onsuccess = function() {
|
backReq.onsuccess = function () {
|
||||||
if (this.result) {
|
if (this.result) {
|
||||||
back.classList.remove('disabled');
|
back.classList.remove('disabled');
|
||||||
} else {
|
} else {
|
||||||
@ -125,7 +124,7 @@ var IABExecs = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
var forwardReq = browserElem.getCanGoForward();
|
var forwardReq = browserElem.getCanGoForward();
|
||||||
forwardReq.onsuccess = function() {
|
forwardReq.onsuccess = function () {
|
||||||
if (this.result) {
|
if (this.result) {
|
||||||
forward.classList.remove('disabled');
|
forward.classList.remove('disabled');
|
||||||
} else {
|
} else {
|
||||||
@ -158,21 +157,21 @@ var IABExecs = {
|
|||||||
browserWrap.appendChild(browserElem);
|
browserWrap.appendChild(browserElem);
|
||||||
document.body.appendChild(browserWrap);
|
document.body.appendChild(browserWrap);
|
||||||
|
|
||||||
//we use mozbrowserlocationchange instead of mozbrowserloadstart to get the url
|
// we use mozbrowserlocationchange instead of mozbrowserloadstart to get the url
|
||||||
browserElem.addEventListener('mozbrowserlocationchange', function(e){
|
browserElem.addEventListener('mozbrowserlocationchange', function (e) {
|
||||||
win({
|
win({
|
||||||
type:'loadstart',
|
type: 'loadstart',
|
||||||
url : e.detail
|
url: e.detail
|
||||||
});
|
});
|
||||||
}, false);
|
}, false);
|
||||||
browserElem.addEventListener('mozbrowserloadend', function(e){
|
browserElem.addEventListener('mozbrowserloadend', function (e) {
|
||||||
win({type:'loadstop'});
|
win({type: 'loadstop'});
|
||||||
}, false);
|
}, false);
|
||||||
browserElem.addEventListener('mozbrowsererror', function(e){
|
browserElem.addEventListener('mozbrowsererror', function (e) {
|
||||||
win({type:'loaderror'});
|
win({type: 'loaderror'});
|
||||||
}, false);
|
}, false);
|
||||||
browserElem.addEventListener('mozbrowserclose', function(e){
|
browserElem.addEventListener('mozbrowserclose', function (e) {
|
||||||
win({type:'exit'});
|
win({type: 'exit'});
|
||||||
}, false);
|
}, false);
|
||||||
} else {
|
} else {
|
||||||
window.location = strUrl;
|
window.location = strUrl;
|
||||||
|
@ -19,14 +19,13 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* jshint -W061 */
|
|
||||||
/* global oxide */
|
/* global oxide */
|
||||||
|
|
||||||
oxide.addMessageHandler("EXECUTE", function(msg) {
|
oxide.addMessageHandler('EXECUTE', function (msg) {
|
||||||
var code = msg.args.code;
|
var code = msg.args.code;
|
||||||
try {
|
try {
|
||||||
msg.reply({result: eval(code)});
|
msg.reply({result: eval(code)}); // eslint-disable-line no-eval
|
||||||
} catch(e) {
|
} catch (e) {
|
||||||
msg.error("Code threw exception: \"" + e + "\"");
|
msg.error('Code threw exception: "' + e + '"');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
* or more contributor license agreements. See the NOTICE file
|
* or more contributor license agreements. See the NOTICE file
|
||||||
@ -21,9 +21,10 @@
|
|||||||
|
|
||||||
/* jslint sloppy:true */
|
/* jslint sloppy:true */
|
||||||
/* global Windows:true, setImmediate */
|
/* global Windows:true, setImmediate */
|
||||||
|
/* eslint standard/no-callback-literal : 0 */
|
||||||
|
|
||||||
var cordova = require('cordova'),
|
var cordova = require('cordova');
|
||||||
urlutil = require('cordova/urlutil');
|
var urlutil = require('cordova/urlutil');
|
||||||
|
|
||||||
var browserWrap,
|
var browserWrap,
|
||||||
popup,
|
popup,
|
||||||
@ -40,56 +41,56 @@ var browserWrap,
|
|||||||
// http://msdn.microsoft.com/en-us/library/windows/apps/dn301831.aspx
|
// http://msdn.microsoft.com/en-us/library/windows/apps/dn301831.aspx
|
||||||
var isWebViewAvailable = cordova.platformId === 'windows';
|
var isWebViewAvailable = cordova.platformId === 'windows';
|
||||||
|
|
||||||
function attachNavigationEvents(element, callback) {
|
function attachNavigationEvents (element, callback) {
|
||||||
if (isWebViewAvailable) {
|
if (isWebViewAvailable) {
|
||||||
element.addEventListener("MSWebViewNavigationStarting", function (e) {
|
element.addEventListener('MSWebViewNavigationStarting', function (e) {
|
||||||
callback({ type: "loadstart", url: e.uri}, {keepCallback: true} );
|
callback({ type: 'loadstart', url: e.uri }, {keepCallback: true});
|
||||||
});
|
});
|
||||||
|
|
||||||
element.addEventListener("MSWebViewNavigationCompleted", function (e) {
|
element.addEventListener('MSWebViewNavigationCompleted', function (e) {
|
||||||
if (e.isSuccess) {
|
if (e.isSuccess) {
|
||||||
callback({ type: "loadstop", url: e.uri }, { keepCallback: true });
|
callback({ type: 'loadstop', url: e.uri }, { keepCallback: true });
|
||||||
} else {
|
} else {
|
||||||
callback({ type: "loaderror", url: e.uri, code: e.webErrorStatus, message: "Navigation failed with error code " + e.webErrorStatus}, { keepCallback: true });
|
callback({ type: 'loaderror', url: e.uri, code: e.webErrorStatus, message: 'Navigation failed with error code ' + e.webErrorStatus }, { keepCallback: true });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
element.addEventListener("MSWebViewUnviewableContentIdentified", function (e) {
|
element.addEventListener('MSWebViewUnviewableContentIdentified', function (e) {
|
||||||
// WebView found the content to be not HTML.
|
// WebView found the content to be not HTML.
|
||||||
// http://msdn.microsoft.com/en-us/library/windows/apps/dn609716.aspx
|
// http://msdn.microsoft.com/en-us/library/windows/apps/dn609716.aspx
|
||||||
callback({ type: "loaderror", url: e.uri, code: e.webErrorStatus, message: "Navigation failed with error code " + e.webErrorStatus}, { keepCallback: true });
|
callback({ type: 'loaderror', url: e.uri, code: e.webErrorStatus, message: 'Navigation failed with error code ' + e.webErrorStatus }, { keepCallback: true });
|
||||||
});
|
});
|
||||||
|
|
||||||
element.addEventListener("MSWebViewContentLoading", function (e) {
|
element.addEventListener('MSWebViewContentLoading', function (e) {
|
||||||
if (navigationButtonsDiv && popup) {
|
if (navigationButtonsDiv && popup) {
|
||||||
if (popup.canGoBack) {
|
if (popup.canGoBack) {
|
||||||
backButton.removeAttribute("disabled");
|
backButton.removeAttribute('disabled');
|
||||||
} else {
|
} else {
|
||||||
backButton.setAttribute("disabled", "true");
|
backButton.setAttribute('disabled', 'true');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (popup.canGoForward) {
|
if (popup.canGoForward) {
|
||||||
forwardButton.removeAttribute("disabled");
|
forwardButton.removeAttribute('disabled');
|
||||||
} else {
|
} else {
|
||||||
forwardButton.setAttribute("disabled", "true");
|
forwardButton.setAttribute('disabled', 'true');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
var onError = function () {
|
var onError = function () {
|
||||||
callback({ type: "loaderror", url: this.contentWindow.location}, {keepCallback: true});
|
callback({ type: 'loaderror', url: this.contentWindow.location }, {keepCallback: true});
|
||||||
};
|
};
|
||||||
|
|
||||||
element.addEventListener("unload", function () {
|
element.addEventListener('unload', function () {
|
||||||
callback({ type: "loadstart", url: this.contentWindow.location}, {keepCallback: true});
|
callback({ type: 'loadstart', url: this.contentWindow.location }, {keepCallback: true});
|
||||||
});
|
});
|
||||||
|
|
||||||
element.addEventListener("load", function () {
|
element.addEventListener('load', function () {
|
||||||
callback({ type: "loadstop", url: this.contentWindow.location}, {keepCallback: true});
|
callback({ type: 'loadstop', url: this.contentWindow.location }, {keepCallback: true});
|
||||||
});
|
});
|
||||||
|
|
||||||
element.addEventListener("error", onError);
|
element.addEventListener('error', onError);
|
||||||
element.addEventListener("abort", onError);
|
element.addEventListener('abort', onError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,7 +99,7 @@ var IAB = {
|
|||||||
setImmediate(function () {
|
setImmediate(function () {
|
||||||
if (browserWrap) {
|
if (browserWrap) {
|
||||||
if (navigationEventsCallback) {
|
if (navigationEventsCallback) {
|
||||||
navigationEventsCallback({ type: "exit" });
|
navigationEventsCallback({ type: 'exit' });
|
||||||
}
|
}
|
||||||
|
|
||||||
browserWrap.parentNode.removeChild(browserWrap);
|
browserWrap.parentNode.removeChild(browserWrap);
|
||||||
@ -107,52 +108,52 @@ var IAB = {
|
|||||||
browserWrap = null;
|
browserWrap = null;
|
||||||
popup = null;
|
popup = null;
|
||||||
|
|
||||||
document.removeEventListener("backbutton", hardwareBackCallback, false);
|
document.removeEventListener('backbutton', hardwareBackCallback, false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
show: function (win, lose) {
|
show: function (win, lose) {
|
||||||
setImmediate(function () {
|
setImmediate(function () {
|
||||||
if (browserWrap) {
|
if (browserWrap) {
|
||||||
browserWrap.style.display = "block";
|
browserWrap.style.display = 'block';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
hide: function (win, lose) {
|
hide: function (win, lose) {
|
||||||
if (browserWrap) {
|
if (browserWrap) {
|
||||||
browserWrap.style.display = "none";
|
browserWrap.style.display = 'none';
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
open: function (win, lose, args) {
|
open: function (win, lose, args) {
|
||||||
// make function async so that we can add navigation events handlers before view is loaded and navigation occured
|
// make function async so that we can add navigation events handlers before view is loaded and navigation occured
|
||||||
setImmediate(function () {
|
setImmediate(function () {
|
||||||
var strUrl = args[0],
|
var strUrl = args[0];
|
||||||
target = args[1],
|
var target = args[1];
|
||||||
features = args[2],
|
var features = args[2];
|
||||||
url;
|
var url;
|
||||||
|
|
||||||
navigationEventsCallback = win;
|
navigationEventsCallback = win;
|
||||||
|
|
||||||
if (target === "_system") {
|
if (target === '_system') {
|
||||||
url = new Windows.Foundation.Uri(strUrl);
|
url = new Windows.Foundation.Uri(strUrl);
|
||||||
Windows.System.Launcher.launchUriAsync(url);
|
Windows.System.Launcher.launchUriAsync(url);
|
||||||
} else if (target === "_self" || !target) {
|
} else if (target === '_self' || !target) {
|
||||||
window.location = strUrl;
|
window.location = strUrl;
|
||||||
} else {
|
} else {
|
||||||
// "_blank" or anything else
|
// "_blank" or anything else
|
||||||
if (!browserWrap) {
|
if (!browserWrap) {
|
||||||
var browserWrapStyle = document.createElement('link');
|
var browserWrapStyle = document.createElement('link');
|
||||||
browserWrapStyle.rel = "stylesheet";
|
browserWrapStyle.rel = 'stylesheet';
|
||||||
browserWrapStyle.type = "text/css";
|
browserWrapStyle.type = 'text/css';
|
||||||
browserWrapStyle.href = urlutil.makeAbsolute("/www/css/inappbrowser.css");
|
browserWrapStyle.href = urlutil.makeAbsolute('/www/css/inappbrowser.css');
|
||||||
|
|
||||||
document.head.appendChild(browserWrapStyle);
|
document.head.appendChild(browserWrapStyle);
|
||||||
|
|
||||||
browserWrap = document.createElement("div");
|
browserWrap = document.createElement('div');
|
||||||
browserWrap.className = "inAppBrowserWrap";
|
browserWrap.className = 'inAppBrowserWrap';
|
||||||
|
|
||||||
if (features.indexOf("fullscreen=yes") > -1) {
|
if (features.indexOf('fullscreen=yes') > -1) {
|
||||||
browserWrap.classList.add("inAppBrowserWrapFullscreen");
|
browserWrap.classList.add('inAppBrowserWrapFullscreen');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save body overflow style to be able to reset it back later
|
// Save body overflow style to be able to reset it back later
|
||||||
@ -166,22 +167,22 @@ var IAB = {
|
|||||||
|
|
||||||
document.body.appendChild(browserWrap);
|
document.body.appendChild(browserWrap);
|
||||||
// Hide scrollbars for the whole body while inappbrowser's window is open
|
// Hide scrollbars for the whole body while inappbrowser's window is open
|
||||||
document.body.style.msOverflowStyle = "none";
|
document.body.style.msOverflowStyle = 'none';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (features.indexOf("hidden=yes") !== -1) {
|
if (features.indexOf('hidden=yes') !== -1) {
|
||||||
browserWrap.style.display = "none";
|
browserWrap.style.display = 'none';
|
||||||
}
|
}
|
||||||
|
|
||||||
popup = document.createElement(isWebViewAvailable ? "x-ms-webview" : "iframe");
|
popup = document.createElement(isWebViewAvailable ? 'x-ms-webview' : 'iframe');
|
||||||
if (popup instanceof HTMLIFrameElement) {
|
if (popup instanceof HTMLIFrameElement) { // eslint-disable-line no-undef
|
||||||
// For iframe we need to override bacground color of parent element here
|
// For iframe we need to override bacground color of parent element here
|
||||||
// otherwise pages without background color set will have transparent background
|
// otherwise pages without background color set will have transparent background
|
||||||
popup.style.backgroundColor = "white";
|
popup.style.backgroundColor = 'white';
|
||||||
}
|
}
|
||||||
popup.style.borderWidth = "0px";
|
popup.style.borderWidth = '0px';
|
||||||
popup.style.width = "100%";
|
popup.style.width = '100%';
|
||||||
popup.style.marginBottom = "-5px";
|
popup.style.marginBottom = '-5px';
|
||||||
|
|
||||||
browserWrap.appendChild(popup);
|
browserWrap.appendChild(popup);
|
||||||
|
|
||||||
@ -191,14 +192,14 @@ var IAB = {
|
|||||||
}, 0);
|
}, 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
if (features.indexOf("hardwareback=yes") > -1 || features.indexOf("hardwareback") === -1) {
|
if (features.indexOf('hardwareback=yes') > -1 || features.indexOf('hardwareback') === -1) {
|
||||||
hardwareBackCallback = function () {
|
hardwareBackCallback = function () {
|
||||||
if (browserWrap.style.display === 'none') {
|
if (browserWrap.style.display === 'none') {
|
||||||
// NOTE: backbutton handlers have to throw an exception in order to prevent
|
// NOTE: backbutton handlers have to throw an exception in order to prevent
|
||||||
// returning 'true' inside cordova-js, which would mean that the event is handled by user.
|
// returning 'true' inside cordova-js, which would mean that the event is handled by user.
|
||||||
// Throwing an exception means that the default/system navigation behavior will take place,
|
// Throwing an exception means that the default/system navigation behavior will take place,
|
||||||
// which is to exit the app if the navigation stack is empty.
|
// which is to exit the app if the navigation stack is empty.
|
||||||
throw 'Exit the app';
|
throw 'Exit the app'; // eslint-disable-line no-throw-literal
|
||||||
}
|
}
|
||||||
|
|
||||||
if (popup.canGoBack) {
|
if (popup.canGoBack) {
|
||||||
@ -207,59 +208,57 @@ var IAB = {
|
|||||||
closeHandler();
|
closeHandler();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
} else if (features.indexOf("hardwareback=no") > -1) {
|
} else if (features.indexOf('hardwareback=no') > -1) {
|
||||||
hardwareBackCallback = function () {
|
hardwareBackCallback = function () {
|
||||||
if (browserWrap.style.display === 'none') {
|
if (browserWrap.style.display === 'none') {
|
||||||
// See comment above
|
// See comment above
|
||||||
throw 'Exit the app';
|
throw 'Exit the app'; // eslint-disable-line no-throw-literal
|
||||||
}
|
}
|
||||||
|
|
||||||
closeHandler();
|
closeHandler();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
document.addEventListener("backbutton", hardwareBackCallback, false);
|
document.addEventListener('backbutton', hardwareBackCallback, false);
|
||||||
|
|
||||||
if (features.indexOf("location=yes") !== -1 || features.indexOf("location") === -1) {
|
if (features.indexOf('location=yes') !== -1 || features.indexOf('location') === -1) {
|
||||||
popup.style.height = "calc(100% - 70px)";
|
popup.style.height = 'calc(100% - 70px)';
|
||||||
|
|
||||||
navigationButtonsDiv = document.createElement("div");
|
navigationButtonsDiv = document.createElement('div');
|
||||||
navigationButtonsDiv.className = "inappbrowser-app-bar";
|
navigationButtonsDiv.className = 'inappbrowser-app-bar';
|
||||||
navigationButtonsDiv.onclick = function (e) {
|
navigationButtonsDiv.onclick = function (e) {
|
||||||
e.cancelBubble = true;
|
e.cancelBubble = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
navigationButtonsDivInner = document.createElement("div");
|
navigationButtonsDivInner = document.createElement('div');
|
||||||
navigationButtonsDivInner.className = "inappbrowser-app-bar-inner";
|
navigationButtonsDivInner.className = 'inappbrowser-app-bar-inner';
|
||||||
navigationButtonsDivInner.onclick = function (e) {
|
navigationButtonsDivInner.onclick = function (e) {
|
||||||
e.cancelBubble = true;
|
e.cancelBubble = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
backButton = document.createElement("div");
|
backButton = document.createElement('div');
|
||||||
backButton.innerText = "back";
|
backButton.innerText = 'back';
|
||||||
backButton.className = "app-bar-action action-back";
|
backButton.className = 'app-bar-action action-back';
|
||||||
backButton.addEventListener("click", function (e) {
|
backButton.addEventListener('click', function (e) {
|
||||||
if (popup.canGoBack)
|
if (popup.canGoBack) { popup.goBack(); }
|
||||||
popup.goBack();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
forwardButton = document.createElement("div");
|
forwardButton = document.createElement('div');
|
||||||
forwardButton.innerText = "forward";
|
forwardButton.innerText = 'forward';
|
||||||
forwardButton.className = "app-bar-action action-forward";
|
forwardButton.className = 'app-bar-action action-forward';
|
||||||
forwardButton.addEventListener("click", function (e) {
|
forwardButton.addEventListener('click', function (e) {
|
||||||
if (popup.canGoForward)
|
if (popup.canGoForward) { popup.goForward(); }
|
||||||
popup.goForward();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
closeButton = document.createElement("div");
|
closeButton = document.createElement('div');
|
||||||
closeButton.innerText = "close";
|
closeButton.innerText = 'close';
|
||||||
closeButton.className = "app-bar-action action-close";
|
closeButton.className = 'app-bar-action action-close';
|
||||||
closeButton.addEventListener("click", closeHandler);
|
closeButton.addEventListener('click', closeHandler);
|
||||||
|
|
||||||
if (!isWebViewAvailable) {
|
if (!isWebViewAvailable) {
|
||||||
// iframe navigation is not yet supported
|
// iframe navigation is not yet supported
|
||||||
backButton.setAttribute("disabled", "true");
|
backButton.setAttribute('disabled', 'true');
|
||||||
forwardButton.setAttribute("disabled", "true");
|
forwardButton.setAttribute('disabled', 'true');
|
||||||
}
|
}
|
||||||
|
|
||||||
navigationButtonsDivInner.appendChild(backButton);
|
navigationButtonsDivInner.appendChild(backButton);
|
||||||
@ -269,14 +268,14 @@ var IAB = {
|
|||||||
|
|
||||||
browserWrap.appendChild(navigationButtonsDiv);
|
browserWrap.appendChild(navigationButtonsDiv);
|
||||||
} else {
|
} else {
|
||||||
popup.style.height = "100%";
|
popup.style.height = '100%';
|
||||||
}
|
}
|
||||||
|
|
||||||
// start listening for navigation events
|
// start listening for navigation events
|
||||||
attachNavigationEvents(popup, navigationEventsCallback);
|
attachNavigationEvents(popup, navigationEventsCallback);
|
||||||
|
|
||||||
if (isWebViewAvailable) {
|
if (isWebViewAvailable) {
|
||||||
strUrl = strUrl.replace("ms-appx://", "ms-appx-web://");
|
strUrl = strUrl.replace('ms-appx://', 'ms-appx-web://');
|
||||||
}
|
}
|
||||||
popup.src = strUrl;
|
popup.src = strUrl;
|
||||||
}
|
}
|
||||||
@ -285,11 +284,11 @@ var IAB = {
|
|||||||
|
|
||||||
injectScriptCode: function (win, fail, args) {
|
injectScriptCode: function (win, fail, args) {
|
||||||
setImmediate(function () {
|
setImmediate(function () {
|
||||||
var code = args[0],
|
var code = args[0];
|
||||||
hasCallback = args[1];
|
var hasCallback = args[1];
|
||||||
|
|
||||||
if (isWebViewAvailable && browserWrap && popup) {
|
if (isWebViewAvailable && browserWrap && popup) {
|
||||||
var op = popup.invokeScriptAsync("eval", code);
|
var op = popup.invokeScriptAsync('eval', code);
|
||||||
op.oncomplete = function (e) {
|
op.oncomplete = function (e) {
|
||||||
if (hasCallback) {
|
if (hasCallback) {
|
||||||
// return null if event target is unavailable by some reason
|
// return null if event target is unavailable by some reason
|
||||||
@ -305,10 +304,10 @@ var IAB = {
|
|||||||
|
|
||||||
injectScriptFile: function (win, fail, args) {
|
injectScriptFile: function (win, fail, args) {
|
||||||
setImmediate(function () {
|
setImmediate(function () {
|
||||||
var filePath = args[0],
|
var filePath = args[0];
|
||||||
hasCallback = args[1];
|
var hasCallback = args[1];
|
||||||
|
|
||||||
if (!!filePath) {
|
if (filePath) {
|
||||||
filePath = urlutil.makeAbsolute(filePath);
|
filePath = urlutil.makeAbsolute(filePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -317,8 +316,8 @@ var IAB = {
|
|||||||
var uri = new Windows.Foundation.Uri(filePath.replace('ms-appx-web:', 'ms-appx:'));
|
var uri = new Windows.Foundation.Uri(filePath.replace('ms-appx-web:', 'ms-appx:'));
|
||||||
Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).done(function (file) {
|
Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).done(function (file) {
|
||||||
Windows.Storage.FileIO.readTextAsync(file).done(function (code) {
|
Windows.Storage.FileIO.readTextAsync(file).done(function (code) {
|
||||||
var op = popup.invokeScriptAsync("eval", code);
|
var op = popup.invokeScriptAsync('eval', code);
|
||||||
op.oncomplete = function(e) {
|
op.oncomplete = function (e) {
|
||||||
if (hasCallback) {
|
if (hasCallback) {
|
||||||
var result = [e.target.result];
|
var result = [e.target.result];
|
||||||
win(result);
|
win(result);
|
||||||
@ -334,8 +333,8 @@ var IAB = {
|
|||||||
|
|
||||||
injectStyleCode: function (win, fail, args) {
|
injectStyleCode: function (win, fail, args) {
|
||||||
setImmediate(function () {
|
setImmediate(function () {
|
||||||
var code = args[0],
|
var code = args[0];
|
||||||
hasCallback = args[1];
|
var hasCallback = args[1];
|
||||||
|
|
||||||
if (isWebViewAvailable && browserWrap && popup) {
|
if (isWebViewAvailable && browserWrap && popup) {
|
||||||
injectCSS(popup, code, hasCallback && win);
|
injectCSS(popup, code, hasCallback && win);
|
||||||
@ -345,8 +344,8 @@ var IAB = {
|
|||||||
|
|
||||||
injectStyleFile: function (win, fail, args) {
|
injectStyleFile: function (win, fail, args) {
|
||||||
setImmediate(function () {
|
setImmediate(function () {
|
||||||
var filePath = args[0],
|
var filePath = args[0];
|
||||||
hasCallback = args[1];
|
var hasCallback = args[1];
|
||||||
|
|
||||||
filePath = filePath && urlutil.makeAbsolute(filePath);
|
filePath = filePath && urlutil.makeAbsolute(filePath);
|
||||||
|
|
||||||
@ -368,11 +367,11 @@ var IAB = {
|
|||||||
function injectCSS (webView, cssCode, callback) {
|
function injectCSS (webView, cssCode, callback) {
|
||||||
// This will automatically escape all thing that we need (quotes, slashes, etc.)
|
// This will automatically escape all thing that we need (quotes, slashes, etc.)
|
||||||
var escapedCode = JSON.stringify(cssCode);
|
var escapedCode = JSON.stringify(cssCode);
|
||||||
var evalWrapper = "(function(d){var c=d.createElement('style');c.innerHTML=%s;d.head.appendChild(c);})(document)"
|
var evalWrapper = '(function(d){var c=d.createElement(\'style\');c.innerHTML=%s;d.head.appendChild(c);})(document)'
|
||||||
.replace('%s', escapedCode);
|
.replace('%s', escapedCode);
|
||||||
|
|
||||||
var op = webView.invokeScriptAsync("eval", evalWrapper);
|
var op = webView.invokeScriptAsync('eval', evalWrapper);
|
||||||
op.oncomplete = function() {
|
op.oncomplete = function () {
|
||||||
if (callback) {
|
if (callback) {
|
||||||
callback([]);
|
callback([]);
|
||||||
}
|
}
|
||||||
@ -383,4 +382,4 @@ function injectCSS (webView, cssCode, callback) {
|
|||||||
|
|
||||||
module.exports = IAB;
|
module.exports = IAB;
|
||||||
|
|
||||||
require("cordova/exec/proxy").add("InAppBrowser", module.exports);
|
require('cordova/exec/proxy').add('InAppBrowser', module.exports);
|
||||||
|
2
tests/.eslintrc.yml
Normal file
2
tests/.eslintrc.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
env:
|
||||||
|
jasmine: true
|
@ -16,5 +16,5 @@
|
|||||||
* specific language governing permissions and limitations
|
* specific language governing permissions and limitations
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
var d = document.getElementById("header");
|
var d = document.getElementById('header');
|
||||||
d.innerHTML = "Script file successfully injected";
|
d.innerHTML = 'Script file successfully injected';
|
||||||
|
142
tests/tests.js
142
tests/tests.js
@ -19,7 +19,6 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* jshint jasmine: true */
|
|
||||||
/* global MSApp */
|
/* global MSApp */
|
||||||
|
|
||||||
var cordova = require('cordova');
|
var cordova = require('cordova');
|
||||||
@ -36,11 +35,11 @@ exports.defineAutoTests = function () {
|
|||||||
|
|
||||||
describe('cordova.InAppBrowser', function () {
|
describe('cordova.InAppBrowser', function () {
|
||||||
|
|
||||||
it("inappbrowser.spec.1 should exist", function () {
|
it('inappbrowser.spec.1 should exist', function () {
|
||||||
expect(cordova.InAppBrowser).toBeDefined();
|
expect(cordova.InAppBrowser).toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("inappbrowser.spec.2 should contain open function", function () {
|
it('inappbrowser.spec.2 should contain open function', function () {
|
||||||
expect(cordova.InAppBrowser.open).toBeDefined();
|
expect(cordova.InAppBrowser.open).toBeDefined();
|
||||||
expect(cordova.InAppBrowser.open).toEqual(jasmine.any(Function));
|
expect(cordova.InAppBrowser.open).toEqual(jasmine.any(Function));
|
||||||
});
|
});
|
||||||
@ -48,7 +47,7 @@ exports.defineAutoTests = function () {
|
|||||||
|
|
||||||
describe('open method', function () {
|
describe('open method', function () {
|
||||||
|
|
||||||
if (cordova.platformId == 'osx') {
|
if (cordova.platformId === 'osx') {
|
||||||
pending('Open method not fully supported on OSX.');
|
pending('Open method not fully supported on OSX.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -78,7 +77,7 @@ exports.defineAutoTests = function () {
|
|||||||
setTimeout(done, 2000);
|
setTimeout(done, 2000);
|
||||||
});
|
});
|
||||||
|
|
||||||
function verifyEvent(evt, type) {
|
function verifyEvent (evt, type) {
|
||||||
expect(evt).toBeDefined();
|
expect(evt).toBeDefined();
|
||||||
expect(evt.type).toEqual(type);
|
expect(evt.type).toEqual(type);
|
||||||
// `exit` event does not have url field, browser returns null url for CORS requests
|
// `exit` event does not have url field, browser returns null url for CORS requests
|
||||||
@ -87,7 +86,7 @@ exports.defineAutoTests = function () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function verifyLoadErrorEvent(evt) {
|
function verifyLoadErrorEvent (evt) {
|
||||||
expect(evt).toBeDefined();
|
expect(evt).toBeDefined();
|
||||||
expect(evt.type).toEqual('loaderror');
|
expect(evt.type).toEqual('loaderror');
|
||||||
expect(evt.url).toEqual(badUrl);
|
expect(evt.url).toEqual(badUrl);
|
||||||
@ -95,7 +94,7 @@ exports.defineAutoTests = function () {
|
|||||||
expect(evt.message).toEqual(jasmine.any(String));
|
expect(evt.message).toEqual(jasmine.any(String));
|
||||||
}
|
}
|
||||||
|
|
||||||
it("inappbrowser.spec.3 should return InAppBrowser instance with required methods", function () {
|
it('inappbrowser.spec.3 should return InAppBrowser instance with required methods', function () {
|
||||||
iabInstance = cordova.InAppBrowser.open(url, '_blank');
|
iabInstance = cordova.InAppBrowser.open(url, '_blank');
|
||||||
|
|
||||||
expect(iabInstance).toBeDefined();
|
expect(iabInstance).toBeDefined();
|
||||||
@ -109,7 +108,7 @@ exports.defineAutoTests = function () {
|
|||||||
expect(iabInstance.insertCSS).toEqual(jasmine.any(Function));
|
expect(iabInstance.insertCSS).toEqual(jasmine.any(Function));
|
||||||
});
|
});
|
||||||
|
|
||||||
it("inappbrowser.spec.4 should support loadstart and loadstop events", function (done) {
|
it('inappbrowser.spec.4 should support loadstart and loadstop events', function (done) {
|
||||||
var onLoadStart = jasmine.createSpy('loadstart event callback').and.callFake(function (evt) {
|
var onLoadStart = jasmine.createSpy('loadstart event callback').and.callFake(function (evt) {
|
||||||
verifyEvent(evt, 'loadstart');
|
verifyEvent(evt, 'loadstart');
|
||||||
});
|
});
|
||||||
@ -127,7 +126,7 @@ exports.defineAutoTests = function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("inappbrowser.spec.5 should support exit event", function (done) {
|
it('inappbrowser.spec.5 should support exit event', function (done) {
|
||||||
iabInstance = cordova.InAppBrowser.open(url, '_blank');
|
iabInstance = cordova.InAppBrowser.open(url, '_blank');
|
||||||
iabInstance.addEventListener('exit', function (evt) {
|
iabInstance.addEventListener('exit', function (evt) {
|
||||||
verifyEvent(evt, 'exit');
|
verifyEvent(evt, 'exit');
|
||||||
@ -137,7 +136,7 @@ exports.defineAutoTests = function () {
|
|||||||
iabInstance = null;
|
iabInstance = null;
|
||||||
});
|
});
|
||||||
|
|
||||||
it("inappbrowser.spec.6 should support loaderror event", function (done) {
|
it('inappbrowser.spec.6 should support loaderror event', function (done) {
|
||||||
if (isBrowser) {
|
if (isBrowser) {
|
||||||
// according to documentation, "loaderror" event is not supported on browser
|
// according to documentation, "loaderror" event is not supported on browser
|
||||||
// https://github.com/apache/cordova-plugin-inappbrowser#browser-quirks-1
|
// https://github.com/apache/cordova-plugin-inappbrowser#browser-quirks-1
|
||||||
@ -154,15 +153,15 @@ exports.defineAutoTests = function () {
|
|||||||
|
|
||||||
exports.defineManualTests = function (contentEl, createActionButton) {
|
exports.defineManualTests = function (contentEl, createActionButton) {
|
||||||
|
|
||||||
function doOpen(url, target, params, numExpectedRedirects, useWindowOpen) {
|
function doOpen (url, target, params, numExpectedRedirects, useWindowOpen) {
|
||||||
numExpectedRedirects = numExpectedRedirects || 0;
|
numExpectedRedirects = numExpectedRedirects || 0;
|
||||||
useWindowOpen = useWindowOpen || false;
|
useWindowOpen = useWindowOpen || false;
|
||||||
console.log("Opening " + url);
|
console.log('Opening ' + url);
|
||||||
|
|
||||||
var counts;
|
var counts;
|
||||||
var lastLoadStartURL;
|
var lastLoadStartURL;
|
||||||
var wasReset = false;
|
var wasReset = false;
|
||||||
function reset() {
|
function reset () {
|
||||||
counts = {
|
counts = {
|
||||||
'loaderror': 0,
|
'loaderror': 0,
|
||||||
'loadstart': 0,
|
'loadstart': 0,
|
||||||
@ -183,49 +182,48 @@ exports.defineManualTests = function (contentEl, createActionButton) {
|
|||||||
if (useWindowOpen) {
|
if (useWindowOpen) {
|
||||||
console.log('Use window.open() for url');
|
console.log('Use window.open() for url');
|
||||||
iab = window.open(url, target, params, callbacks);
|
iab = window.open(url, target, params, callbacks);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
iab = cordova.InAppBrowser.open(url, target, params, callbacks);
|
iab = cordova.InAppBrowser.open(url, target, params, callbacks);
|
||||||
}
|
}
|
||||||
if (!iab) {
|
if (!iab) {
|
||||||
alert('open returned ' + iab);
|
alert('open returned ' + iab); // eslint-disable-line no-undef
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function logEvent(e) {
|
function logEvent (e) {
|
||||||
console.log('IAB event=' + JSON.stringify(e));
|
console.log('IAB event=' + JSON.stringify(e));
|
||||||
counts[e.type]++;
|
counts[e.type]++;
|
||||||
// Verify that event.url gets updated on redirects.
|
// Verify that event.url gets updated on redirects.
|
||||||
if (e.type == 'loadstart') {
|
if (e.type === 'loadstart') {
|
||||||
if (e.url == lastLoadStartURL) {
|
if (e.url === lastLoadStartURL) {
|
||||||
alert('Unexpected: loadstart fired multiple times for the same URL.');
|
alert('Unexpected: loadstart fired multiple times for the same URL.'); // eslint-disable-line no-undef
|
||||||
}
|
}
|
||||||
lastLoadStartURL = e.url;
|
lastLoadStartURL = e.url;
|
||||||
}
|
}
|
||||||
// Verify the right number of loadstart events were fired.
|
// Verify the right number of loadstart events were fired.
|
||||||
if (e.type == 'loadstop' || e.type == 'loaderror') {
|
if (e.type === 'loadstop' || e.type === 'loaderror') {
|
||||||
if (e.url != lastLoadStartURL) {
|
if (e.url !== lastLoadStartURL) {
|
||||||
alert('Unexpected: ' + e.type + ' event.url != loadstart\'s event.url');
|
alert('Unexpected: ' + e.type + ' event.url != loadstart\'s event.url'); // eslint-disable-line no-undef
|
||||||
}
|
}
|
||||||
if (numExpectedRedirects === 0 && counts.loadstart !== 1) {
|
if (numExpectedRedirects === 0 && counts.loadstart !== 1) {
|
||||||
// Do allow a loaderror without a loadstart (e.g. in the case of an invalid URL).
|
// Do allow a loaderror without a loadstart (e.g. in the case of an invalid URL).
|
||||||
if (!(e.type == 'loaderror' && counts.loadstart === 0)) {
|
if (!(e.type === 'loaderror' && counts.loadstart === 0)) {
|
||||||
alert('Unexpected: got multiple loadstart events. (' + counts.loadstart + ')');
|
alert('Unexpected: got multiple loadstart events. (' + counts.loadstart + ')'); // eslint-disable-line no-undef
|
||||||
}
|
}
|
||||||
} else if (numExpectedRedirects > 0 && counts.loadstart < (numExpectedRedirects + 1)) {
|
} else if (numExpectedRedirects > 0 && counts.loadstart < (numExpectedRedirects + 1)) {
|
||||||
alert('Unexpected: should have got at least ' + (numExpectedRedirects + 1) + ' loadstart events, but got ' + counts.loadstart);
|
alert('Unexpected: should have got at least ' + (numExpectedRedirects + 1) + ' loadstart events, but got ' + counts.loadstart); // eslint-disable-line no-undef
|
||||||
}
|
}
|
||||||
wasReset = true;
|
wasReset = true;
|
||||||
numExpectedRedirects = 0;
|
numExpectedRedirects = 0;
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
// Verify that loadend / loaderror was called.
|
// Verify that loadend / loaderror was called.
|
||||||
if (e.type == 'exit') {
|
if (e.type === 'exit') {
|
||||||
var numStopEvents = counts.loadstop + counts.loaderror;
|
var numStopEvents = counts.loadstop + counts.loaderror;
|
||||||
if (numStopEvents === 0 && !wasReset) {
|
if (numStopEvents === 0 && !wasReset) {
|
||||||
alert('Unexpected: browser closed without a loadstop or loaderror.');
|
alert('Unexpected: browser closed without a loadstop or loaderror.'); // eslint-disable-line no-undef
|
||||||
} else if (numStopEvents > 1) {
|
} else if (numStopEvents > 1) {
|
||||||
alert('Unexpected: got multiple loadstop/loaderror events.');
|
alert('Unexpected: got multiple loadstop/loaderror events.'); // eslint-disable-line no-undef
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -233,33 +231,31 @@ exports.defineManualTests = function (contentEl, createActionButton) {
|
|||||||
return iab;
|
return iab;
|
||||||
}
|
}
|
||||||
|
|
||||||
function doHookOpen(url, target, params, numExpectedRedirects) {
|
function doHookOpen (url, target, params, numExpectedRedirects) {
|
||||||
var originalFunc = window.open;
|
var originalFunc = window.open;
|
||||||
var wasClobbered = window.hasOwnProperty('open');
|
var wasClobbered = window.hasOwnProperty('open');
|
||||||
window.open = cordova.InAppBrowser.open;
|
window.open = cordova.InAppBrowser.open;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
doOpen(url, target, params, numExpectedRedirects, true);
|
doOpen(url, target, params, numExpectedRedirects, true);
|
||||||
}
|
} finally {
|
||||||
finally {
|
|
||||||
if (wasClobbered) {
|
if (wasClobbered) {
|
||||||
window.open = originalFunc;
|
window.open = originalFunc;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
console.log('just delete, to restore open from prototype');
|
console.log('just delete, to restore open from prototype');
|
||||||
delete window.open;
|
delete window.open;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function openWithStyle(url, cssUrl, useCallback) {
|
function openWithStyle (url, cssUrl, useCallback) {
|
||||||
var iab = doOpen(url, '_blank', 'location=yes');
|
var iab = doOpen(url, '_blank', 'location=yes');
|
||||||
var callback = function (results) {
|
var callback = function (results) {
|
||||||
if (results && results.length === 0) {
|
if (results && results.length === 0) {
|
||||||
alert('Results verified');
|
alert('Results verified'); // eslint-disable-line no-undef
|
||||||
} else {
|
} else {
|
||||||
console.log(results);
|
console.log(results);
|
||||||
alert('Got: ' + typeof (results) + '\n' + JSON.stringify(results));
|
alert('Got: ' + typeof (results) + '\n' + JSON.stringify(results)); // eslint-disable-line no-undef
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
if (cssUrl) {
|
if (cssUrl) {
|
||||||
@ -274,16 +270,16 @@ exports.defineManualTests = function (contentEl, createActionButton) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function openWithScript(url, jsUrl, useCallback) {
|
function openWithScript (url, jsUrl, useCallback) {
|
||||||
var iab = doOpen(url, '_blank', 'location=yes');
|
var iab = doOpen(url, '_blank', 'location=yes');
|
||||||
if (jsUrl) {
|
if (jsUrl) {
|
||||||
iab.addEventListener('loadstop', function (event) {
|
iab.addEventListener('loadstop', function (event) {
|
||||||
iab.executeScript({ file: jsUrl }, useCallback && function (results) {
|
iab.executeScript({ file: jsUrl }, useCallback && function (results) {
|
||||||
if (results && results.length === 0) {
|
if (results && results.length === 0) {
|
||||||
alert('Results verified');
|
alert('Results verified'); // eslint-disable-line no-undef
|
||||||
} else {
|
} else {
|
||||||
console.log(results);
|
console.log(results);
|
||||||
alert('Got: ' + typeof (results) + '\n' + JSON.stringify(results));
|
alert('Got: ' + typeof (results) + '\n' + JSON.stringify(results)); // eslint-disable-line no-undef
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -296,33 +292,33 @@ exports.defineManualTests = function (contentEl, createActionButton) {
|
|||||||
'})()';
|
'})()';
|
||||||
iab.executeScript({ code: code }, useCallback && function (results) {
|
iab.executeScript({ code: code }, useCallback && function (results) {
|
||||||
if (results && results.length === 1 && results[0] === 'abc') {
|
if (results && results.length === 1 && results[0] === 'abc') {
|
||||||
alert('Results verified');
|
alert('Results verified'); // eslint-disable-line no-undef
|
||||||
} else {
|
} else {
|
||||||
console.log(results);
|
console.log(results);
|
||||||
alert('Got: ' + typeof (results) + '\n' + JSON.stringify(results));
|
alert('Got: ' + typeof (results) + '\n' + JSON.stringify(results)); // eslint-disable-line no-undef
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var hiddenwnd = null;
|
var hiddenwnd = null;
|
||||||
var loadlistener = function (event) { alert('background window loaded '); };
|
var loadlistener = function (event) { alert('background window loaded '); }; // eslint-disable-line no-undef
|
||||||
function openHidden(url, startHidden) {
|
function openHidden (url, startHidden) {
|
||||||
var shopt = (startHidden) ? 'hidden=yes' : '';
|
var shopt = (startHidden) ? 'hidden=yes' : '';
|
||||||
hiddenwnd = cordova.InAppBrowser.open(url, 'random_string', shopt);
|
hiddenwnd = cordova.InAppBrowser.open(url, 'random_string', shopt);
|
||||||
if (!hiddenwnd) {
|
if (!hiddenwnd) {
|
||||||
alert('cordova.InAppBrowser.open returned ' + hiddenwnd);
|
alert('cordova.InAppBrowser.open returned ' + hiddenwnd); // eslint-disable-line no-undef
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (startHidden) hiddenwnd.addEventListener('loadstop', loadlistener);
|
if (startHidden) hiddenwnd.addEventListener('loadstop', loadlistener);
|
||||||
}
|
}
|
||||||
function showHidden() {
|
function showHidden () {
|
||||||
if (!!hiddenwnd) {
|
if (hiddenwnd) {
|
||||||
hiddenwnd.show();
|
hiddenwnd.show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function closeHidden() {
|
function closeHidden () {
|
||||||
if (!!hiddenwnd) {
|
if (hiddenwnd) {
|
||||||
hiddenwnd.removeEventListener('loadstop', loadlistener);
|
hiddenwnd.removeEventListener('loadstop', loadlistener);
|
||||||
hiddenwnd.close();
|
hiddenwnd.close();
|
||||||
hiddenwnd = null;
|
hiddenwnd = null;
|
||||||
@ -474,7 +470,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
|
|||||||
// CB-7490 We need to wrap this code due to Windows security restrictions
|
// CB-7490 We need to wrap this code due to Windows security restrictions
|
||||||
// see http://msdn.microsoft.com/en-us/library/windows/apps/hh465380.aspx#differences for details
|
// see http://msdn.microsoft.com/en-us/library/windows/apps/hh465380.aspx#differences for details
|
||||||
if (window.MSApp && window.MSApp.execUnsafeLocalFunction) {
|
if (window.MSApp && window.MSApp.execUnsafeLocalFunction) {
|
||||||
MSApp.execUnsafeLocalFunction(function() {
|
MSApp.execUnsafeLocalFunction(function () {
|
||||||
contentEl.innerHTML = info_div + local_tests + white_listed_tests + non_white_listed_tests + page_with_redirects_tests + pdf_url_tests + invalid_url_tests +
|
contentEl.innerHTML = info_div + local_tests + white_listed_tests + non_white_listed_tests + page_with_redirects_tests + pdf_url_tests + invalid_url_tests +
|
||||||
css_js_injection_tests + open_hidden_tests + clearing_cache_tests + video_tag_tests + local_with_anchor_tag_tests + hardwareback_tests;
|
css_js_injection_tests + open_hidden_tests + clearing_cache_tests + video_tag_tests + local_with_anchor_tag_tests + hardwareback_tests;
|
||||||
});
|
});
|
||||||
@ -483,18 +479,18 @@ exports.defineManualTests = function (contentEl, createActionButton) {
|
|||||||
css_js_injection_tests + open_hidden_tests + clearing_cache_tests + video_tag_tests + local_with_anchor_tag_tests + hardwareback_tests;
|
css_js_injection_tests + open_hidden_tests + clearing_cache_tests + video_tag_tests + local_with_anchor_tag_tests + hardwareback_tests;
|
||||||
}
|
}
|
||||||
|
|
||||||
document.getElementById("user-agent").textContent = navigator.userAgent;
|
document.getElementById('user-agent').textContent = navigator.userAgent;
|
||||||
|
|
||||||
// we are already in cdvtests directory
|
// we are already in cdvtests directory
|
||||||
var basePath = 'iab-resources/';
|
var basePath = 'iab-resources/';
|
||||||
var localhtml = basePath + 'local.html',
|
var localhtml = basePath + 'local.html';
|
||||||
localpdf = basePath + 'local.pdf',
|
var localpdf = basePath + 'local.pdf';
|
||||||
injecthtml = basePath + 'inject.html',
|
var injecthtml = basePath + 'inject.html';
|
||||||
injectjs = isWindows ? basePath + 'inject.js' : 'inject.js',
|
var injectjs = isWindows ? basePath + 'inject.js' : 'inject.js';
|
||||||
injectcss = isWindows ? basePath + 'inject.css' : 'inject.css',
|
var injectcss = isWindows ? basePath + 'inject.css' : 'inject.css';
|
||||||
videohtml = basePath + 'video.html';
|
var videohtml = basePath + 'video.html';
|
||||||
|
|
||||||
//Local
|
// Local
|
||||||
createActionButton('target=Default', function () {
|
createActionButton('target=Default', function () {
|
||||||
doOpen(localhtml);
|
doOpen(localhtml);
|
||||||
}, 'openLocal');
|
}, 'openLocal');
|
||||||
@ -523,7 +519,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
|
|||||||
doOpen(localhtml, 'random_string', 'toolbarposition=top,location=no');
|
doOpen(localhtml, 'random_string', 'toolbarposition=top,location=no');
|
||||||
}, 'openLocalRandomToolBarTopNoLocation');
|
}, 'openLocalRandomToolBarTopNoLocation');
|
||||||
|
|
||||||
//White Listed
|
// White Listed
|
||||||
createActionButton('* target=Default', function () {
|
createActionButton('* target=Default', function () {
|
||||||
doOpen('http://cordova.apache.org');
|
doOpen('http://cordova.apache.org');
|
||||||
}, 'openWhiteListed');
|
}, 'openWhiteListed');
|
||||||
@ -546,7 +542,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
|
|||||||
doOpen('http://cordova.apache.org', 'random_string', 'location=no');
|
doOpen('http://cordova.apache.org', 'random_string', 'location=no');
|
||||||
}, 'openWhiteListedRandomNoLocation');
|
}, 'openWhiteListedRandomNoLocation');
|
||||||
|
|
||||||
//Non White Listed
|
// Non White Listed
|
||||||
createActionButton('target=Default', function () {
|
createActionButton('target=Default', function () {
|
||||||
doOpen('http://www.apple.com');
|
doOpen('http://www.apple.com');
|
||||||
}, 'openNonWhiteListed');
|
}, 'openNonWhiteListed');
|
||||||
@ -569,7 +565,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
|
|||||||
doOpen('http://www.apple.com', 'random_string', 'location=no');
|
doOpen('http://www.apple.com', 'random_string', 'location=no');
|
||||||
}, 'openNonWhiteListedRandomNoLocation');
|
}, 'openNonWhiteListedRandomNoLocation');
|
||||||
|
|
||||||
//Page with redirect
|
// Page with redirect
|
||||||
createActionButton('http://google.co.uk', function () {
|
createActionButton('http://google.co.uk', function () {
|
||||||
doOpen('http://google.co.uk', 'random_string', '', 1);
|
doOpen('http://google.co.uk', 'random_string', '', 1);
|
||||||
}, 'openRedirect301');
|
}, 'openRedirect301');
|
||||||
@ -577,7 +573,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
|
|||||||
doOpen('http://goo.gl/pUFqg', 'random_string', '', 2);
|
doOpen('http://goo.gl/pUFqg', 'random_string', '', 2);
|
||||||
}, 'openRedirect302');
|
}, 'openRedirect302');
|
||||||
|
|
||||||
//PDF URL
|
// PDF URL
|
||||||
createActionButton('Remote URL', function () {
|
createActionButton('Remote URL', function () {
|
||||||
doOpen('http://www.stluciadance.com/prospectus_file/sample.pdf');
|
doOpen('http://www.stluciadance.com/prospectus_file/sample.pdf');
|
||||||
}, 'openPDF');
|
}, 'openPDF');
|
||||||
@ -585,7 +581,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
|
|||||||
doOpen(localpdf, '_blank');
|
doOpen(localpdf, '_blank');
|
||||||
}, 'openPDFBlank');
|
}, 'openPDFBlank');
|
||||||
|
|
||||||
//Invalid URL
|
// Invalid URL
|
||||||
createActionButton('Invalid Scheme', function () {
|
createActionButton('Invalid Scheme', function () {
|
||||||
doOpen('x-ttp://www.invalid.com/', '_blank');
|
doOpen('x-ttp://www.invalid.com/', '_blank');
|
||||||
}, 'openInvalidScheme');
|
}, 'openInvalidScheme');
|
||||||
@ -596,7 +592,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
|
|||||||
doOpen('nonexistent.html', '_blank');
|
doOpen('nonexistent.html', '_blank');
|
||||||
}, 'openInvalidMissing');
|
}, 'openInvalidMissing');
|
||||||
|
|
||||||
//CSS / JS injection
|
// CSS / JS injection
|
||||||
createActionButton('Original Document', function () {
|
createActionButton('Original Document', function () {
|
||||||
doOpen(injecthtml, '_blank');
|
doOpen(injecthtml, '_blank');
|
||||||
}, 'openOriginalDocument');
|
}, 'openOriginalDocument');
|
||||||
@ -625,7 +621,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
|
|||||||
openWithScript(injecthtml, null, true);
|
openWithScript(injecthtml, null, true);
|
||||||
}, 'openScriptLiteralInjectionCallback');
|
}, 'openScriptLiteralInjectionCallback');
|
||||||
|
|
||||||
//Open hidden
|
// Open hidden
|
||||||
createActionButton('Create Hidden', function () {
|
createActionButton('Create Hidden', function () {
|
||||||
openHidden('https://www.google.co.uk', true);
|
openHidden('https://www.google.co.uk', true);
|
||||||
}, 'openHidden');
|
}, 'openHidden');
|
||||||
@ -645,7 +641,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
|
|||||||
}, 2000);
|
}, 2000);
|
||||||
}, 'openVisibleAndHide');
|
}, 'openVisibleAndHide');
|
||||||
|
|
||||||
//Clearing cache
|
// Clearing cache
|
||||||
createActionButton('Clear Browser Cache', function () {
|
createActionButton('Clear Browser Cache', function () {
|
||||||
doOpen('https://www.google.co.uk', '_blank', 'clearcache=yes');
|
doOpen('https://www.google.co.uk', '_blank', 'clearcache=yes');
|
||||||
}, 'openClearCache');
|
}, 'openClearCache');
|
||||||
@ -653,7 +649,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
|
|||||||
doOpen('https://www.google.co.uk', '_blank', 'clearsessioncache=yes');
|
doOpen('https://www.google.co.uk', '_blank', 'clearsessioncache=yes');
|
||||||
}, 'openClearSessionCache');
|
}, 'openClearSessionCache');
|
||||||
|
|
||||||
//Video tag
|
// Video tag
|
||||||
createActionButton('Remote Video', function () {
|
createActionButton('Remote Video', function () {
|
||||||
doOpen(videohtml, '_blank');
|
doOpen(videohtml, '_blank');
|
||||||
}, 'openRemoteVideo');
|
}, 'openRemoteVideo');
|
||||||
@ -664,7 +660,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
|
|||||||
doOpen(videohtml, '_blank', 'mediaPlaybackRequiresUserAction=yes');
|
doOpen(videohtml, '_blank', 'mediaPlaybackRequiresUserAction=yes');
|
||||||
}, 'openRemoteNeedUserYesVideo');
|
}, 'openRemoteNeedUserYesVideo');
|
||||||
|
|
||||||
//Local With Anchor Tag
|
// Local With Anchor Tag
|
||||||
createActionButton('Anchor1', function () {
|
createActionButton('Anchor1', function () {
|
||||||
doOpen(localhtml + '#bogusanchor', '_blank');
|
doOpen(localhtml + '#bogusanchor', '_blank');
|
||||||
}, 'openAnchor1');
|
}, 'openAnchor1');
|
||||||
@ -682,17 +678,17 @@ exports.defineManualTests = function (contentEl, createActionButton) {
|
|||||||
createActionButton('hardwareback=no', function () {
|
createActionButton('hardwareback=no', function () {
|
||||||
doOpen('http://cordova.apache.org', '_blank', 'hardwareback=no');
|
doOpen('http://cordova.apache.org', '_blank', 'hardwareback=no');
|
||||||
}, 'openHardwareBackNo');
|
}, 'openHardwareBackNo');
|
||||||
createActionButton('no hardwareback -> hardwareback=no -> no hardwareback', function() {
|
createActionButton('no hardwareback -> hardwareback=no -> no hardwareback', function () {
|
||||||
var ref = cordova.InAppBrowser.open('https://google.com', '_blank', 'location=yes');
|
var ref = cordova.InAppBrowser.open('https://google.com', '_blank', 'location=yes');
|
||||||
ref.addEventListener('loadstop', function() {
|
ref.addEventListener('loadstop', function () {
|
||||||
ref.close();
|
ref.close();
|
||||||
});
|
});
|
||||||
ref.addEventListener('exit', function() {
|
ref.addEventListener('exit', function () {
|
||||||
var ref2 = cordova.InAppBrowser.open('https://google.com', '_blank', 'location=yes,hardwareback=no');
|
var ref2 = cordova.InAppBrowser.open('https://google.com', '_blank', 'location=yes,hardwareback=no');
|
||||||
ref2.addEventListener('loadstop', function() {
|
ref2.addEventListener('loadstop', function () {
|
||||||
ref2.close();
|
ref2.close();
|
||||||
});
|
});
|
||||||
ref2.addEventListener('exit', function() {
|
ref2.addEventListener('exit', function () {
|
||||||
cordova.InAppBrowser.open('https://google.com', '_blank', 'location=yes');
|
cordova.InAppBrowser.open('https://google.com', '_blank', 'location=yes');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
(function() {
|
(function () {
|
||||||
// special patch to correctly work on Ripple emulator (CB-9760)
|
// special patch to correctly work on Ripple emulator (CB-9760)
|
||||||
if (window.parent && !!window.parent.ripple) { // https://gist.github.com/triceam/4658021
|
if (window.parent && !!window.parent.ripple) { // https://gist.github.com/triceam/4658021
|
||||||
module.exports = window.open.bind(window); // fallback to default window.open behaviour
|
module.exports = window.open.bind(window); // fallback to default window.open behaviour
|
||||||
@ -31,12 +31,12 @@
|
|||||||
var modulemapper = require('cordova/modulemapper');
|
var modulemapper = require('cordova/modulemapper');
|
||||||
var urlutil = require('cordova/urlutil');
|
var urlutil = require('cordova/urlutil');
|
||||||
|
|
||||||
function InAppBrowser() {
|
function InAppBrowser () {
|
||||||
this.channels = {
|
this.channels = {
|
||||||
'loadstart': channel.create('loadstart'),
|
'loadstart': channel.create('loadstart'),
|
||||||
'loadstop' : channel.create('loadstop'),
|
'loadstop': channel.create('loadstop'),
|
||||||
'loaderror' : channel.create('loaderror'),
|
'loaderror': channel.create('loaderror'),
|
||||||
'exit' : channel.create('exit')
|
'exit': channel.create('exit')
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,47 +47,47 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
close: function (eventname) {
|
close: function (eventname) {
|
||||||
exec(null, null, "InAppBrowser", "close", []);
|
exec(null, null, 'InAppBrowser', 'close', []);
|
||||||
},
|
},
|
||||||
show: function (eventname) {
|
show: function (eventname) {
|
||||||
exec(null, null, "InAppBrowser", "show", []);
|
exec(null, null, 'InAppBrowser', 'show', []);
|
||||||
},
|
},
|
||||||
hide: function (eventname) {
|
hide: function (eventname) {
|
||||||
exec(null, null, "InAppBrowser", "hide", []);
|
exec(null, null, 'InAppBrowser', 'hide', []);
|
||||||
},
|
},
|
||||||
addEventListener: function (eventname,f) {
|
addEventListener: function (eventname, f) {
|
||||||
if (eventname in this.channels) {
|
if (eventname in this.channels) {
|
||||||
this.channels[eventname].subscribe(f);
|
this.channels[eventname].subscribe(f);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
removeEventListener: function(eventname, f) {
|
removeEventListener: function (eventname, f) {
|
||||||
if (eventname in this.channels) {
|
if (eventname in this.channels) {
|
||||||
this.channels[eventname].unsubscribe(f);
|
this.channels[eventname].unsubscribe(f);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
executeScript: function(injectDetails, cb) {
|
executeScript: function (injectDetails, cb) {
|
||||||
if (injectDetails.code) {
|
if (injectDetails.code) {
|
||||||
exec(cb, null, "InAppBrowser", "injectScriptCode", [injectDetails.code, !!cb]);
|
exec(cb, null, 'InAppBrowser', 'injectScriptCode', [injectDetails.code, !!cb]);
|
||||||
} else if (injectDetails.file) {
|
} else if (injectDetails.file) {
|
||||||
exec(cb, null, "InAppBrowser", "injectScriptFile", [injectDetails.file, !!cb]);
|
exec(cb, null, 'InAppBrowser', 'injectScriptFile', [injectDetails.file, !!cb]);
|
||||||
} else {
|
} else {
|
||||||
throw new Error('executeScript requires exactly one of code or file to be specified');
|
throw new Error('executeScript requires exactly one of code or file to be specified');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
insertCSS: function(injectDetails, cb) {
|
insertCSS: function (injectDetails, cb) {
|
||||||
if (injectDetails.code) {
|
if (injectDetails.code) {
|
||||||
exec(cb, null, "InAppBrowser", "injectStyleCode", [injectDetails.code, !!cb]);
|
exec(cb, null, 'InAppBrowser', 'injectStyleCode', [injectDetails.code, !!cb]);
|
||||||
} else if (injectDetails.file) {
|
} else if (injectDetails.file) {
|
||||||
exec(cb, null, "InAppBrowser", "injectStyleFile", [injectDetails.file, !!cb]);
|
exec(cb, null, 'InAppBrowser', 'injectStyleFile', [injectDetails.file, !!cb]);
|
||||||
} else {
|
} else {
|
||||||
throw new Error('insertCSS requires exactly one of code or file to be specified');
|
throw new Error('insertCSS requires exactly one of code or file to be specified');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = function(strUrl, strWindowName, strWindowFeatures, callbacks) {
|
module.exports = function (strUrl, strWindowName, strWindowFeatures, callbacks) {
|
||||||
// Don't catch calls that write to existing frames (e.g. named iframes).
|
// Don't catch calls that write to existing frames (e.g. named iframes).
|
||||||
if (window.frames && window.frames[strWindowName]) {
|
if (window.frames && window.frames[strWindowName]) {
|
||||||
var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open');
|
var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open');
|
||||||
@ -102,13 +102,13 @@
|
|||||||
iab.addEventListener(callbackName, callbacks[callbackName]);
|
iab.addEventListener(callbackName, callbacks[callbackName]);
|
||||||
}
|
}
|
||||||
|
|
||||||
var cb = function(eventname) {
|
var cb = function (eventname) {
|
||||||
iab._eventHandler(eventname);
|
iab._eventHandler(eventname);
|
||||||
};
|
};
|
||||||
|
|
||||||
strWindowFeatures = strWindowFeatures || "";
|
strWindowFeatures = strWindowFeatures || '';
|
||||||
|
|
||||||
exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]);
|
exec(cb, cb, 'InAppBrowser', 'open', [strUrl, strWindowName, strWindowFeatures]);
|
||||||
return iab;
|
return iab;
|
||||||
};
|
};
|
||||||
})();
|
})();
|
||||||
|
@ -19,8 +19,8 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*jslint sloppy:true */
|
/* jslint sloppy:true */
|
||||||
/*global Windows:true, require, document, setTimeout, window, module */
|
/* global Windows:true, require, document, setTimeout, window, module */
|
||||||
|
|
||||||
var browserWrap;
|
var browserWrap;
|
||||||
|
|
||||||
@ -36,33 +36,33 @@ var IAB = {
|
|||||||
/* empty block, ran out of bacon?
|
/* empty block, ran out of bacon?
|
||||||
if (browserWrap) {
|
if (browserWrap) {
|
||||||
|
|
||||||
}*/
|
} */
|
||||||
},
|
},
|
||||||
hide: function (win, lose) {
|
hide: function (win, lose) {
|
||||||
/* empty block, ran out of bacon?
|
/* empty block, ran out of bacon?
|
||||||
if (browserWrap) {
|
if (browserWrap) {
|
||||||
|
|
||||||
}*/
|
} */
|
||||||
},
|
},
|
||||||
open: function (win, lose, args) {
|
open: function (win, lose, args) {
|
||||||
var strUrl = args[0],
|
var strUrl = args[0];
|
||||||
target = args[1],
|
var target = args[1];
|
||||||
url,
|
var url;
|
||||||
elem;
|
var elem;
|
||||||
|
|
||||||
if (target === "_system") {
|
if (target === '_system') {
|
||||||
url = new Windows.Foundation.Uri(strUrl);
|
url = new Windows.Foundation.Uri(strUrl);
|
||||||
Windows.System.Launcher.launchUriAsync(url);
|
Windows.System.Launcher.launchUriAsync(url);
|
||||||
} else if (target === "_blank") {
|
} else if (target === '_blank') {
|
||||||
if (!browserWrap) {
|
if (!browserWrap) {
|
||||||
browserWrap = document.createElement("div");
|
browserWrap = document.createElement('div');
|
||||||
browserWrap.style.position = "absolute";
|
browserWrap.style.position = 'absolute';
|
||||||
browserWrap.style.width = (window.innerWidth - 80) + "px";
|
browserWrap.style.width = (window.innerWidth - 80) + 'px';
|
||||||
browserWrap.style.height = (window.innerHeight - 80) + "px";
|
browserWrap.style.height = (window.innerHeight - 80) + 'px';
|
||||||
browserWrap.style.borderWidth = "40px";
|
browserWrap.style.borderWidth = '40px';
|
||||||
browserWrap.style.borderStyle = "solid";
|
browserWrap.style.borderStyle = 'solid';
|
||||||
browserWrap.style.borderColor = "rgba(0,0,0,0.25)";
|
browserWrap.style.borderColor = 'rgba(0,0,0,0.25)';
|
||||||
browserWrap.style.zIndex = "9999999";
|
browserWrap.style.zIndex = '9999999';
|
||||||
|
|
||||||
browserWrap.onclick = function () {
|
browserWrap.onclick = function () {
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
@ -74,33 +74,31 @@ var IAB = {
|
|||||||
}
|
}
|
||||||
var localFile = (strUrl.indexOf('ms-appdata:///') > -1);
|
var localFile = (strUrl.indexOf('ms-appdata:///') > -1);
|
||||||
if (localFile) {
|
if (localFile) {
|
||||||
elem = document.createElement("x-ms-webview");
|
elem = document.createElement('x-ms-webview');
|
||||||
elem.style.width = (window.innerWidth - 80) + "px";
|
elem.style.width = (window.innerWidth - 80) + 'px';
|
||||||
elem.style.height = (window.innerHeight - 80) + "px";
|
elem.style.height = (window.innerHeight - 80) + 'px';
|
||||||
elem.style.borderWidth = "0px";
|
elem.style.borderWidth = '0px';
|
||||||
elem.name = "targetFrame";
|
elem.name = 'targetFrame';
|
||||||
elem.src = strUrl;
|
elem.src = strUrl;
|
||||||
|
|
||||||
window.addEventListener("resize", function () {
|
window.addEventListener('resize', function () {
|
||||||
if (browserWrap && elem) {
|
if (browserWrap && elem) {
|
||||||
elem.style.width = (window.innerWidth - 80) + "px";
|
elem.style.width = (window.innerWidth - 80) + 'px';
|
||||||
elem.style.height = (window.innerHeight - 80) + "px";
|
elem.style.height = (window.innerHeight - 80) + 'px';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
elem = document.createElement("iframe");
|
elem = document.createElement('iframe');
|
||||||
elem.style.width = (window.innerWidth - 80) + "px";
|
elem.style.width = (window.innerWidth - 80) + 'px';
|
||||||
elem.style.height = (window.innerHeight - 80) + "px";
|
elem.style.height = (window.innerHeight - 80) + 'px';
|
||||||
elem.style.borderWidth = "0px";
|
elem.style.borderWidth = '0px';
|
||||||
elem.name = "targetFrame";
|
elem.name = 'targetFrame';
|
||||||
elem.src = strUrl;
|
elem.src = strUrl;
|
||||||
|
|
||||||
|
window.addEventListener('resize', function () {
|
||||||
window.addEventListener("resize", function () {
|
|
||||||
if (browserWrap && elem) {
|
if (browserWrap && elem) {
|
||||||
elem.style.width = (window.innerWidth - 80) + "px";
|
elem.style.width = (window.innerWidth - 80) + 'px';
|
||||||
elem.style.height = (window.innerHeight - 80) + "px";
|
elem.style.height = (window.innerHeight - 80) + 'px';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -110,8 +108,7 @@ var IAB = {
|
|||||||
window.location = strUrl;
|
window.location = strUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
//var object = new WinJS.UI.HtmlControl(elem, { uri: strUrl });
|
// var object = new WinJS.UI.HtmlControl(elem, { uri: strUrl });
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
injectScriptCode: function (code, bCB) {
|
injectScriptCode: function (code, bCB) {
|
||||||
@ -126,5 +123,4 @@ var IAB = {
|
|||||||
|
|
||||||
module.exports = IAB;
|
module.exports = IAB;
|
||||||
|
|
||||||
|
require('cordova/exec/proxy').add('InAppBrowser', module.exports);
|
||||||
require("cordova/exec/proxy").add("InAppBrowser", module.exports);
|
|
||||||
|
Loading…
Reference in New Issue
Block a user