[jira] [Commented] (CB-8028) handleOpenURL doesn't work properly when app is being launched for the first time

2014-12-02 Thread Antonio Laguna (JIRA)

[ 
https://issues.apache.org/jira/browse/CB-8028?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14231268#comment-14231268
 ] 

Antonio Laguna commented on CB-8028:


I reckon that's not a good solution since that function not being defined 
doesn't mean the page is not loaded. It may work as a workaround but not as a 
end to end solution. 

Either the {{readyState}} is {{true}} earlier than it should or that function 
is being called prematurely. 

I fixed it with a Cordova Plugin which is fairly simple and trivial. Will 
remove as soon as this gets fixed.

{code:title=UrlHandler.h|borderStyle=solid}
#import 

@interface UrlHandler : CDVPlugin

@property (nonatomic, strong) NSURL *url;

@end
{code}
{code:title=UrlHandler.m|borderStyle=solid}
- (void)pluginInitialize
{
[[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(applicationLaunchedWithUrl:) 
name:CDVPluginHandleOpenURLNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(applicationFinishedLaunching:) 
name:CDVPageDidLoadNotification object:nil];
}

- (void)applicationLaunchedWithUrl:(NSNotification*)notification
{
NSURL *url = [notification object];
self.url = url;
}

- (void)applicationFinishedLaunching:(NSNotification*)notification
{
if (self.url != nil) {
NSString* jsString = [NSString stringWithFormat:@"if (typeof 
handleOpenURL === 'function') { handleOpenURL(\"%@\");}", self.url];
[self.webView stringByEvaluatingJavaScriptFromString:jsString];
}
}
{code}

> handleOpenURL doesn't work properly when app is being launched for the first 
> time
> -
>
> Key: CB-8028
> URL: https://issues.apache.org/jira/browse/CB-8028
> Project: Apache Cordova
>  Issue Type: Bug
>  Components: iOS
>Affects Versions: 3.7.0
>Reporter: Antonio Laguna
>Assignee: Shazron Abdullah
>
> Hi!
> Please bear in mind that this is my first issue being reported here but I 
> thought it to be worth it.
> So, we've been developing a Cordova application lately and we decided to add 
> a notification center plugin to be able to launch the application from it, 
> taking advantage of the url-scheme on iOS.
> We discovered that it worked flawlessly when it was launched and the app was 
> in background but it wasn't when the app was closed and tried to launch from 
> there.
> So I dug deeper.
> Since this is an Ionic application, I thought the issue was due to Angular 
> not being ready at the appropriate time or something like that so I just put 
> something really low-level which didn't depend on any library:
> {code:javascript}
> window.foo = 'bar';
> {code}
> And then checked with a timeout (after app was ready) to see if it was there. 
> But it wasn't. 
> So I dug deeper.
> So the issue seems to come on this function which is on the 
> {{CDDViewController}} class
> {code}
> - (void)processOpenUrl:(NSURL*)url pageLoaded:(BOOL)pageLoaded
> {
> if (!pageLoaded) {
> // query the webview for readystate
> NSString* readyState = [webView 
> stringByEvaluatingJavaScriptFromString:@"document.readyState"];
> pageLoaded = [readyState isEqualToString:@"loaded"] || [readyState 
> isEqualToString:@"complete"];
> }
> if (pageLoaded) {
> // calls into javascript global function 'handleOpenURL'
> NSString* jsString = [NSString stringWithFormat:@"if (typeof 
> handleOpenURL === 'function') { handleOpenURL(\"%@\");}", url];
> [self.webView stringByEvaluatingJavaScriptFromString:jsString];
> } else {
> // save for when page has loaded
> self.openURL = url;
> }
> }
> {code}
> The thing is that the second check for {{pageLoaded}} is positive even though 
> the page is clearly at a really early stage. The Splash is still being shown 
> and the DOM although it may be ready-ish, it doesn't work properly (clearly).
> This is the flow:
> * It comes first by {{(void)processOpenUrl:(NSURL*)url}} - The 
> {{handleOpenUrl}} function is then called cause even though {{NO}} is passed 
> as a parameter, Cordova gets to think it's ready.
> * Then it comes to {{onPageDidLoad}} which would call 
> {{(void)processOpenUrl:(NSURL*)url pageLoaded:(BOOL)pageLoaded}} too but 
> since {{openURL}} hasn't been saved this time, it won't do anything
> Just to make sure of things, I tried to {{self.openURL = url;}} even if the 
> page was loaded and that turned out to work. 
> I don't understand the implications of this but IMHO, {{onPageDidLoad}} is a 
> better point to understand wether the app is ready or not than querying the 
> document like that cause the code doesn't seem to be there yet.
> Please note that I put my handler before anything else on the header to 
> ensure it wasn't a r

[jira] [Commented] (CB-8028) handleOpenURL doesn't work properly when app is being launched for the first time

2014-11-20 Thread Antonio Laguna (JIRA)

[ 
https://issues.apache.org/jira/browse/CB-8028?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14219123#comment-14219123
 ] 

Antonio Laguna commented on CB-8028:


I'm really sorry. I totally forgot about me using 3.7.0. I used that since 
3.6.0 didn't seem to handle nice the new iPhone screen sizes. I've updated the 
issue.

> handleOpenURL doesn't work properly when app is being launched for the first 
> time
> -
>
> Key: CB-8028
> URL: https://issues.apache.org/jira/browse/CB-8028
> Project: Apache Cordova
>  Issue Type: Bug
>  Components: iOS
>Affects Versions: 3.7.0
>Reporter: Antonio Laguna
>Assignee: Shazron Abdullah
>
> Hi!
> Please bear in mind that this is my first issue being reported here but I 
> thought it to be worth it.
> So, we've been developing a Cordova application lately and we decided to add 
> a notification center plugin to be able to launch the application from it, 
> taking advantage of the url-scheme on iOS.
> We discovered that it worked flawlessly when it was launched and the app was 
> in background but it wasn't when the app was closed and tried to launch from 
> there.
> So I dug deeper.
> Since this is an Ionic application, I thought the issue was due to Angular 
> not being ready at the appropriate time or something like that so I just put 
> something really low-level which didn't depend on any library:
> {code:javascript}
> window.foo = 'bar';
> {code}
> And then checked with a timeout (after app was ready) to see if it was there. 
> But it wasn't. 
> So I dug deeper.
> So the issue seems to come on this function which is on the 
> {{CDDViewController}} class
> {code}
> - (void)processOpenUrl:(NSURL*)url pageLoaded:(BOOL)pageLoaded
> {
> if (!pageLoaded) {
> // query the webview for readystate
> NSString* readyState = [webView 
> stringByEvaluatingJavaScriptFromString:@"document.readyState"];
> pageLoaded = [readyState isEqualToString:@"loaded"] || [readyState 
> isEqualToString:@"complete"];
> }
> if (pageLoaded) {
> // calls into javascript global function 'handleOpenURL'
> NSString* jsString = [NSString stringWithFormat:@"if (typeof 
> handleOpenURL === 'function') { handleOpenURL(\"%@\");}", url];
> [self.webView stringByEvaluatingJavaScriptFromString:jsString];
> } else {
> // save for when page has loaded
> self.openURL = url;
> }
> }
> {code}
> The thing is that the second check for {{pageLoaded}} is positive even though 
> the page is clearly at a really early stage. The Splash is still being shown 
> and the DOM although it may be ready-ish, it doesn't work properly (clearly).
> This is the flow:
> * It comes first by {{(void)processOpenUrl:(NSURL*)url}} - The 
> {{handleOpenUrl}} function is then called cause even though {{NO}} is passed 
> as a parameter, Cordova gets to think it's ready.
> * Then it comes to {{onPageDidLoad}} which would call 
> {{(void)processOpenUrl:(NSURL*)url pageLoaded:(BOOL)pageLoaded}} too but 
> since {{openURL}} hasn't been saved this time, it won't do anything
> Just to make sure of things, I tried to {{self.openURL = url;}} even if the 
> page was loaded and that turned out to work. 
> I don't understand the implications of this but IMHO, {{onPageDidLoad}} is a 
> better point to understand wether the app is ready or not than querying the 
> document like that cause the code doesn't seem to be there yet.
> Please note that I put my handler before anything else on the header to 
> ensure it wasn't a racing issue.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

-
To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org
For additional commands, e-mail: issues-h...@cordova.apache.org



[jira] [Updated] (CB-8028) handleOpenURL doesn't work properly when app is being launched for the first time

2014-11-20 Thread Antonio Laguna (JIRA)

 [ 
https://issues.apache.org/jira/browse/CB-8028?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Antonio Laguna updated CB-8028:
---
Affects Version/s: (was: 3.6.0)
   3.7.0

> handleOpenURL doesn't work properly when app is being launched for the first 
> time
> -
>
> Key: CB-8028
> URL: https://issues.apache.org/jira/browse/CB-8028
> Project: Apache Cordova
>  Issue Type: Bug
>  Components: iOS
>Affects Versions: 3.7.0
>Reporter: Antonio Laguna
>Assignee: Shazron Abdullah
>
> Hi!
> Please bear in mind that this is my first issue being reported here but I 
> thought it to be worth it.
> So, we've been developing a Cordova application lately and we decided to add 
> a notification center plugin to be able to launch the application from it, 
> taking advantage of the url-scheme on iOS.
> We discovered that it worked flawlessly when it was launched and the app was 
> in background but it wasn't when the app was closed and tried to launch from 
> there.
> So I dug deeper.
> Since this is an Ionic application, I thought the issue was due to Angular 
> not being ready at the appropriate time or something like that so I just put 
> something really low-level which didn't depend on any library:
> {code:javascript}
> window.foo = 'bar';
> {code}
> And then checked with a timeout (after app was ready) to see if it was there. 
> But it wasn't. 
> So I dug deeper.
> So the issue seems to come on this function which is on the 
> {{CDDViewController}} class
> {code}
> - (void)processOpenUrl:(NSURL*)url pageLoaded:(BOOL)pageLoaded
> {
> if (!pageLoaded) {
> // query the webview for readystate
> NSString* readyState = [webView 
> stringByEvaluatingJavaScriptFromString:@"document.readyState"];
> pageLoaded = [readyState isEqualToString:@"loaded"] || [readyState 
> isEqualToString:@"complete"];
> }
> if (pageLoaded) {
> // calls into javascript global function 'handleOpenURL'
> NSString* jsString = [NSString stringWithFormat:@"if (typeof 
> handleOpenURL === 'function') { handleOpenURL(\"%@\");}", url];
> [self.webView stringByEvaluatingJavaScriptFromString:jsString];
> } else {
> // save for when page has loaded
> self.openURL = url;
> }
> }
> {code}
> The thing is that the second check for {{pageLoaded}} is positive even though 
> the page is clearly at a really early stage. The Splash is still being shown 
> and the DOM although it may be ready-ish, it doesn't work properly (clearly).
> This is the flow:
> * It comes first by {{(void)processOpenUrl:(NSURL*)url}} - The 
> {{handleOpenUrl}} function is then called cause even though {{NO}} is passed 
> as a parameter, Cordova gets to think it's ready.
> * Then it comes to {{onPageDidLoad}} which would call 
> {{(void)processOpenUrl:(NSURL*)url pageLoaded:(BOOL)pageLoaded}} too but 
> since {{openURL}} hasn't been saved this time, it won't do anything
> Just to make sure of things, I tried to {{self.openURL = url;}} even if the 
> page was loaded and that turned out to work. 
> I don't understand the implications of this but IMHO, {{onPageDidLoad}} is a 
> better point to understand wether the app is ready or not than querying the 
> document like that cause the code doesn't seem to be there yet.
> Please note that I put my handler before anything else on the header to 
> ensure it wasn't a racing issue.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

-
To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org
For additional commands, e-mail: issues-h...@cordova.apache.org



[jira] [Updated] (CB-8028) handleOpenURL doesn't work properly when app is being launched for the first time

2014-11-17 Thread Antonio Laguna (JIRA)

 [ 
https://issues.apache.org/jira/browse/CB-8028?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Antonio Laguna updated CB-8028:
---
Description: 
Hi!

Please bear in mind that this is my first issue being reported here but I 
thought it to be worth it.

So, we've been developing a Cordova application lately and we decided to add a 
notification center plugin to be able to launch the application from it, taking 
advantage of the url-scheme on iOS.

We discovered that it worked flawlessly when it was launched and the app was in 
background but it wasn't when the app was closed and tried to launch from there.

So I dug deeper.

Since this is an Ionic application, I thought the issue was due to Angular not 
being ready at the appropriate time or something like that so I just put 
something really low-level which didn't depend on any library:

{code:javascript}
window.foo = 'bar';
{code}

And then checked with a timeout (after app was ready) to see if it was there. 
But it wasn't. 

So I dug deeper.

So the issue seems to come on this function which is on the 
{{CDDViewController}} class

{code}
- (void)processOpenUrl:(NSURL*)url pageLoaded:(BOOL)pageLoaded
{
if (!pageLoaded) {
// query the webview for readystate
NSString* readyState = [webView 
stringByEvaluatingJavaScriptFromString:@"document.readyState"];
pageLoaded = [readyState isEqualToString:@"loaded"] || [readyState 
isEqualToString:@"complete"];
}

if (pageLoaded) {
// calls into javascript global function 'handleOpenURL'
NSString* jsString = [NSString stringWithFormat:@"if (typeof 
handleOpenURL === 'function') { handleOpenURL(\"%@\");}", url];
[self.webView stringByEvaluatingJavaScriptFromString:jsString];
} else {
// save for when page has loaded
self.openURL = url;
}
}
{code}

The thing is that the second check for {{pageLoaded}} is positive even though 
the page is clearly at a really early stage. The Splash is still being shown 
and the DOM although it may be ready-ish, it doesn't work properly (clearly).

This is the flow:

* It comes first by {{(void)processOpenUrl:(NSURL*)url}} - The 
{{handleOpenUrl}} function is then called cause even though {{NO}} is passed as 
a parameter, Cordova gets to think it's ready.
* Then it comes to {{onPageDidLoad}} which would call 
{{(void)processOpenUrl:(NSURL*)url pageLoaded:(BOOL)pageLoaded}} too but since 
{{openURL}} hasn't been saved this time, it won't do anything

Just to make sure of things, I tried to {{self.openURL = url;}} even if the 
page was loaded and that turned out to work. 

I don't understand the implications of this but IMHO, {{onPageDidLoad}} is a 
better point to understand wether the app is ready or not than querying the 
document like that cause the code doesn't seem to be there yet.

Please note that I put my handler before anything else on the header to ensure 
it wasn't a racing issue.

  was:
Hi!

Please bear in mind that this is my first issue being reported here but I 
thought it to be worth it.

So, we've been developing a Cordova application lately and we decided to add a 
notification center plugin to be able to launch the application from it, taking 
advantage of the url-scheme on iOS.

We discovered that it worked flawlessly when it was launched and the app was in 
background but it wasn't when the app was closed and tried to launch from there.

So I dug deeper.

Since this is an Ionic application, I thought the issue was due to Angular not 
being ready at the appropriate time or something like that so I just put 
something really low-level which didn't depend on any library:

{code:javascript}
window.foo = 'bar';
{code}

And then checked with a timeout (after app was ready) to see if it was there. 
But it wasn't. 

So I dug deeper.

So the issue seems to come on this function which is on the 

{code}
- (void)processOpenUrl:(NSURL*)url pageLoaded:(BOOL)pageLoaded
{
if (!pageLoaded) {
// query the webview for readystate
NSString* readyState = [webView 
stringByEvaluatingJavaScriptFromString:@"document.readyState"];
pageLoaded = [readyState isEqualToString:@"loaded"] || [readyState 
isEqualToString:@"complete"];
}

if (pageLoaded) {
// calls into javascript global function 'handleOpenURL'
NSString* jsString = [NSString stringWithFormat:@"if (typeof 
handleOpenURL === 'function') { handleOpenURL(\"%@\");}", url];
[self.webView stringByEvaluatingJavaScriptFromString:jsString];
} else {
// save for when page has loaded
self.openURL = url;
}
}
{code}

The thing is that the second check for {{pageLoaded}} is positive even though 
the page is clearly at a really early stage. The Splash is still being shown 
and the DOM although it may be ready-ish, it doesn't work properly (clearly).

This is the flow:

* It comes first by {{(void)processOpenUrl:(NSURL*)url}}

[jira] [Created] (CB-8028) handleOpenURL doesn't work properly when app is being launched for the first time

2014-11-17 Thread Antonio Laguna (JIRA)
Antonio Laguna created CB-8028:
--

 Summary: handleOpenURL doesn't work properly when app is being 
launched for the first time
 Key: CB-8028
 URL: https://issues.apache.org/jira/browse/CB-8028
 Project: Apache Cordova
  Issue Type: Bug
  Components: iOS
Affects Versions: 3.6.0
Reporter: Antonio Laguna


Hi!

Please bear in mind that this is my first issue being reported here but I 
thought it to be worth it.

So, we've been developing a Cordova application lately and we decided to add a 
notification center plugin to be able to launch the application from it, taking 
advantage of the url-scheme on iOS.

We discovered that it worked flawlessly when it was launched and the app was in 
background but it wasn't when the app was closed and tried to launch from there.

So I dug deeper.

Since this is an Ionic application, I thought the issue was due to Angular not 
being ready at the appropriate time or something like that so I just put 
something really low-level which didn't depend on any library:

{code:javascript}
window.foo = 'bar';
{code}

And then checked with a timeout (after app was ready) to see if it was there. 
But it wasn't. 

So I dug deeper.

So the issue seems to come on this function which is on the 

{code}
- (void)processOpenUrl:(NSURL*)url pageLoaded:(BOOL)pageLoaded
{
if (!pageLoaded) {
// query the webview for readystate
NSString* readyState = [webView 
stringByEvaluatingJavaScriptFromString:@"document.readyState"];
pageLoaded = [readyState isEqualToString:@"loaded"] || [readyState 
isEqualToString:@"complete"];
}

if (pageLoaded) {
// calls into javascript global function 'handleOpenURL'
NSString* jsString = [NSString stringWithFormat:@"if (typeof 
handleOpenURL === 'function') { handleOpenURL(\"%@\");}", url];
[self.webView stringByEvaluatingJavaScriptFromString:jsString];
} else {
// save for when page has loaded
self.openURL = url;
}
}
{code}

The thing is that the second check for {{pageLoaded}} is positive even though 
the page is clearly at a really early stage. The Splash is still being shown 
and the DOM although it may be ready-ish, it doesn't work properly (clearly).

This is the flow:

* It comes first by {{(void)processOpenUrl:(NSURL*)url}} - The 
{{handleOpenUrl}} function is then called cause even though {{NO}} is passed as 
a parameter, Cordova gets to think it's ready.
* Then it comes to {{onPageDidLoad}} which would call 
{{(void)processOpenUrl:(NSURL*)url pageLoaded:(BOOL)pageLoaded}} too but since 
{{openURL}} hasn't been saved this time, it won't do anything

Just to make sure of things, I tried to {{self.openURL = url;}} even if the 
page was loaded and that turned out to work. 

I don't understand the implications of this but IMHO, {{onPageDidLoad}} is a 
better point to understand wether the app is ready or not than querying the 
document like that cause the code doesn't seem to be there yet.

Please note that I put my handler before anything else on the header to ensure 
it wasn't a racing issue.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

-
To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org
For additional commands, e-mail: issues-h...@cordova.apache.org