summaryrefslogtreecommitdiff
path: root/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios
diff options
context:
space:
mode:
Diffstat (limited to 'StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios')
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios/CDVInAppBrowser.h1
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios/CDVInAppBrowser.m86
2 files changed, 63 insertions, 24 deletions
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios/CDVInAppBrowser.h b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios/CDVInAppBrowser.h
index 1ccc7b14..6bb0ec16 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios/CDVInAppBrowser.h
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios/CDVInAppBrowser.h
@@ -30,7 +30,6 @@
@class CDVInAppBrowserViewController;
@interface CDVInAppBrowser : CDVPlugin {
- BOOL _injectedIframeBridge;
}
@property (nonatomic, retain) CDVInAppBrowserViewController* inAppBrowserViewController;
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios/CDVInAppBrowser.m b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios/CDVInAppBrowser.m
index 47a8ab3a..b342ca73 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios/CDVInAppBrowser.m
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios/CDVInAppBrowser.m
@@ -47,6 +47,11 @@
_callbackIdPattern = nil;
}
+- (id)settingForKey:(NSString*)key
+{
+ return [self.commandDelegate.settings objectForKey:[key lowercaseString]];
+}
+
- (void)onReset
{
[self close:nil];
@@ -137,8 +142,16 @@
}
if (self.inAppBrowserViewController == nil) {
- NSString* originalUA = [CDVUserAgentUtil originalUserAgent];
- self.inAppBrowserViewController = [[CDVInAppBrowserViewController alloc] initWithUserAgent:originalUA prevUserAgent:[self.commandDelegate userAgent] browserOptions: browserOptions];
+ NSString* userAgent = [CDVUserAgentUtil originalUserAgent];
+ NSString* overrideUserAgent = [self settingForKey:@"OverrideUserAgent"];
+ NSString* appendUserAgent = [self settingForKey:@"AppendUserAgent"];
+ if(overrideUserAgent){
+ userAgent = overrideUserAgent;
+ }
+ if(appendUserAgent){
+ userAgent = [userAgent stringByAppendingString: appendUserAgent];
+ }
+ self.inAppBrowserViewController = [[CDVInAppBrowserViewController alloc] initWithUserAgent:userAgent prevUserAgent:[self.commandDelegate userAgent] browserOptions: browserOptions];
self.inAppBrowserViewController.navigationDelegate = self;
if ([self.viewController conformsToProtocol:@protocol(CDVScreenOrientationDelegate)]) {
@@ -218,6 +231,7 @@
initWithRootViewController:self.inAppBrowserViewController];
nav.orientationDelegate = self.inAppBrowserViewController;
nav.navigationBarHidden = YES;
+ nav.modalPresentationStyle = self.inAppBrowserViewController.modalPresentationStyle;
__weak CDVInAppBrowser* weakSelf = self;
@@ -231,25 +245,25 @@
- (void)openInCordovaWebView:(NSURL*)url withOptions:(NSString*)options
{
- if ([self.commandDelegate URLIsWhitelisted:url]) {
- NSURLRequest* request = [NSURLRequest requestWithURL:url];
+ NSURLRequest* request = [NSURLRequest requestWithURL:url];
+
#ifdef __CORDOVA_4_0_0
- [self.webViewEngine loadRequest:request];
+ // the webview engine itself will filter for this according to <allow-navigation> policy
+ // in config.xml for cordova-ios-4.0
+ [self.webViewEngine loadRequest:request];
#else
+ if ([self.commandDelegate URLIsWhitelisted:url]) {
[self.webView loadRequest:request];
-#endif
} else { // this assumes the InAppBrowser can be excepted from the white-list
[self openInInAppBrowser:url withOptions:options];
}
+#endif
}
- (void)openInSystem:(NSURL*)url
{
- if ([[UIApplication sharedApplication] canOpenURL:url]) {
- [[UIApplication sharedApplication] openURL:url];
- } else { // handle any custom schemes to plugins
- [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPluginHandleOpenURLNotification object:url]];
- }
+ [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPluginHandleOpenURLNotification object:url]];
+ [[UIApplication sharedApplication] openURL:url];
}
// This is a helper method for the inject{Script|Style}{Code|File} API calls, which
@@ -263,11 +277,8 @@
- (void)injectDeferredObject:(NSString*)source withWrapper:(NSString*)jsWrapper
{
- if (!_injectedIframeBridge) {
- _injectedIframeBridge = YES;
- // Create an iframe bridge in the new document to communicate with the CDVInAppBrowserViewController
- [self.inAppBrowserViewController.webView stringByEvaluatingJavaScriptFromString:@"(function(d){var e = _cdvIframeBridge = d.createElement('iframe');e.style.display='none';d.body.appendChild(e);})(document)"];
- }
+ // Ensure an iframe bridge is created to communicate with the CDVInAppBrowserViewController
+ [self.inAppBrowserViewController.webView stringByEvaluatingJavaScriptFromString:@"(function(d){_cdvIframeBridge=d.getElementById('_cdvIframeBridge');if(!_cdvIframeBridge) {var e = _cdvIframeBridge = d.createElement('iframe');e.id='_cdvIframeBridge'; e.style.display='none';d.body.appendChild(e);}})(document)"];
if (jsWrapper != nil) {
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:@[source] options:0 error:nil];
@@ -390,7 +401,14 @@
[self.commandDelegate sendPluginResult:pluginResult callbackId:scriptCallbackId];
return NO;
}
- } else if ((self.callbackId != nil) && isTopLevelNavigation) {
+ }
+ //if is an app store link, let the system handle it, otherwise it fails to load it
+ else if ([[ url scheme] isEqualToString:@"itms-appss"] || [[ url scheme] isEqualToString:@"itms-apps"]) {
+ [theWebView stopLoading];
+ [self openInSystem:url];
+ return NO;
+ }
+ else if ((self.callbackId != nil) && isTopLevelNavigation) {
// Send a loadstart event for each top-level navigation (includes redirects).
CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK
messageAsDictionary:@{@"type":@"loadstart", @"url":[url absoluteString]}];
@@ -404,7 +422,6 @@
- (void)webViewDidStartLoad:(UIWebView*)theWebView
{
- _injectedIframeBridge = NO;
}
- (void)webViewDidFinishLoad:(UIWebView*)theWebView
@@ -512,15 +529,15 @@
self.webView.scalesPageToFit = NO;
self.webView.userInteractionEnabled = YES;
- self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
+ self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
self.spinner.alpha = 1.000;
self.spinner.autoresizesSubviews = YES;
- self.spinner.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin;
+ self.spinner.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin);
self.spinner.clearsContextBeforeDrawing = NO;
self.spinner.clipsToBounds = NO;
self.spinner.contentMode = UIViewContentModeScaleToFill;
- self.spinner.frame = CGRectMake(454.0, 231.0, 20.0, 20.0);
- self.spinner.hidden = YES;
+ self.spinner.frame = CGRectMake(CGRectGetMidX(self.webView.frame), CGRectGetMidY(self.webView.frame), 20.0, 20.0);
+ self.spinner.hidden = NO;
self.spinner.hidesWhenStopped = YES;
self.spinner.multipleTouchEnabled = NO;
self.spinner.opaque = NO;
@@ -749,6 +766,10 @@
return UIStatusBarStyleDefault;
}
+- (BOOL)prefersStatusBarHidden {
+ return NO;
+}
+
- (void)close
{
[CDVUserAgentUtil releaseLock:&_userAgentLockToken];
@@ -988,19 +1009,38 @@
@implementation CDVInAppBrowserNavigationController : UINavigationController
+- (void) dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion {
+ if ( self.presentedViewController) {
+ [super dismissViewControllerAnimated:flag completion:completion];
+ }
+}
+
- (void) viewDidLoad {
CGRect frame = [UIApplication sharedApplication].statusBarFrame;
// simplified from: http://stackoverflow.com/a/25669695/219684
- UIToolbar* bgToolbar = [[UIToolbar alloc] initWithFrame:frame];
+ UIToolbar* bgToolbar = [[UIToolbar alloc] initWithFrame:[self invertFrameIfNeeded:frame]];
bgToolbar.barStyle = UIBarStyleDefault;
+ [bgToolbar setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
[self.view addSubview:bgToolbar];
[super viewDidLoad];
}
+- (CGRect) invertFrameIfNeeded:(CGRect)rect {
+ // We need to invert since on iOS 7 frames are always in Portrait context
+ if (!IsAtLeastiOSVersion(@"8.0")) {
+ if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) {
+ CGFloat temp = rect.size.width;
+ rect.size.width = rect.size.height;
+ rect.size.height = temp;
+ }
+ rect.origin = CGPointZero;
+ }
+ return rect;
+}
#pragma mark CDVScreenOrientationDelegate