There are some quirks which are making it difficult to narrow down the
reason why AuthSub fails in IE. So far i know it only happens when
google.load is used with a callback, even when google.load is called
while the page is being loaded.
So something like the following:
<body>
<script>
google.load("gdata", "1.10", myCallback);
</script>
<input type="button" value="login" onclick="google.accounts.user.login
('scope-here')" />
</body>
Will always see the following behavior:
1. User clicks to login.
2. User is redirect to authorization page and clicks to authorize.
3. User is redirected back to the original page, with a token appended
in the URL.
4. Page doesn't consume the token in the URL (the correct behavior is
for the page to place the token in a cookie and remove the token from
the url).
5. User clicks to login again.
6. User gets redirected to authorization page again, and steps 3-6 are
repeated an arbitrary number of times.
7. If, after reaching the authorization page a second time, the user
clicks the browser's back button, causing the browser to go back to
the page that contains the token in the url, the token is successfully
consumed and the user is successfully logged in. Go figure.
Why "backing" into the page causes GData to successfully consume the
token i have no idea - especially since refreshing the page at step 4
has no effect.
My guess is that when backing into the page IE will use a cached
version of the GData script, which is processed immediately and may
make the difference.
Bobby
On Aug 14, 1:37 am, Bobby <[email protected]> wrote:
> This was outside GWT. I'm trying to find the cause of the IE AuthSub
> issue outside of GWT first. Basically, when google.load() is called
> after the page has finished loading - such as from a button click,
> AuthSub doesn't succeed.
>
> Bobby
>
> On Aug 14, 12:17 am, Eric Ayers <[email protected]> wrote:
>
> > If you are calling JavaScript inside of a GWT JSNI function, you
> > should be using $wnd.google.load(...)
>
> > On Thu, Aug 13, 2009 at 11:55 PM, Bobby<[email protected]> wrote:
>
> > > This IE AuthSub issue is not because of the IFrame, the transferToken
> > > approach didn't make a difference.
>
> > > I tried placing the google.load('gdata', '1.10'); call in a button
> > > click event. Here's the code:
> > > <html>
> > > <body>
> > > <img src="logo-small.png" />
> > > <script type="text/javascript" src="http://www.google.com/jsapi"></
> > > script>
> > > <script type="text/javascript">
> > > function loadGData() {
> > > google.load('gdata', '1.10');
> > > }
> > > </script>
> > > <input type="button" value="Load GData" onclick="loadGData();" />
> > > </body>
> > > </html>
>
> > > If you try this, when you click "Load GData", the page is cleared and
> > > nothing really happens. If you look at the page source after clicking
> > > the button you see the following:
> > > <script src="http://www.google.com/uds/?file=gdata&v=1.10" type="text/
> > > javascript"></script>
>
> > > This is what would happen if document.write was being used and would
> > > explain a few things.
>
> > > Eric, does your AjaxLoader module use google.load() from the jsapi?
>
> > > Bobby
>
> > > On Aug 13, 10:20 pm, Bobby <[email protected]> wrote:
> > >> By the way, i've finished porting the samples (70 of them) i'm
> > >> currently polishing and commenting the samples code.
>
> > >> I've added specialized Callbacks into the API, for example
> > >> BlogEntryCallback (extending AsyncCallback<BlogEntry>) - this meant
> > >> adding specialized methods for insert/update/delete, but makes for a
> > >> better API. There have been other changes and design choices as well.
>
> > >> In the Maps samples, the create/update features are not working
> > >> because of a KML-related defect which i might try to get around with
> > >> GWT:http://code.google.com/p/gmaps-api-issues/issues/detail?id=1585
>
> > >> Other than that i have a small list of items to wrap up (including
> > >> this IE issue) and some documentation to write, but nothing major and
> > >> i'm counting on having a download by the end of this week or next week
> > >> at the latest.
>
> > >> Bobby
>
> > >> On Aug 13, 9:46 pm, Bobby <[email protected]> wrote:
>
> > >> > The onModuleLoad is within an iframe, that's probably the cause. I
> > >> > think i can find a way around this. For example, i can add the
> > >> > following method to the GData module:
> > >> > GData.transferTokenOrSomething();
>
> > >> > This function would check the top frame for a token and append it to
> > >> > the IFrame's location. I'll play around with this.
>
> > >> > Bobby
>
> > >> > On Aug 13, 9:29 pm, Bobby <[email protected]> wrote:
>
> > >> > > Another possible cause could be for example if, in the compiled GWT
> > >> > > app, the google.load call happens inside an IFrame.
>
> > >> > > Currently, with google.load being called from onModuleLoad,
> > >> > > google.accounts.user.login() causes the redirect to the Google
> > >> > > Accounts authorization page, but when it redirects back, with the
> > >> > > token in the URL (for example /HelloGData.html#tokenhere), the token
> > >> > > doesn't get consumed (in IE), and the authentication doesn't succeed.
>
> > >> > > If GWT is placing the onModuleLoad code inside an IFrame, then it may
> > >> > > cause the GData library to look for the token on the IFrame
> > >> > > window.location, instead of the top's window.location.
>
> > >> > > Bobby
>
> > >> > > On Aug 13, 9:16 pm, Eric Ayers <[email protected]> wrote:
>
> > >> > > > The gdata init shouldn't use document.write() - you should be able
> > >> > > > to
> > >> > > > call it at any time.
>
> > >> > > > There is a tradeoff of using the AjaxLoader module - it does add
> > >> > > > more
> > >> > > > delay than using the script version. Fortunately, you can code
> > >> > > > your
> > >> > > > app using AjaxLoader and then if you need the speedup, just add the
> > >> > > > logic in your host page. AjaxLoader will detect that the jsapi is
> > >> > > > already there and bypass it. You can add that check in your
> > >> > > > version
> > >> > > > of GData.loadGDataApi() if you like.
>
> > >> > > > On Thu, Aug 13, 2009 at 9:11 PM, Bobby<[email protected]>
> > >> > > > wrote:
>
> > >> > > > > In the GData JS library, in IE, AuthSub fails if
> > >> > > > > google.load("gdata",
> > >> > > > > "1.10"); is asynchronous, after the page has finished
> > >> > > > > processing. For
> > >> > > > > example, if i place the google.load("gdata", "1.10"); call
> > >> > > > > within the
> > >> > > > > GWT onModuleLoad method, then AuthSub stops halfway.
>
> > >> > > > > To avoid this we can directly add the following at the top of
> > >> > > > > the GWT
> > >> > > > > html page:
> > >> > > > > <script type="text/javascript"
> > >> > > > > src="http://www.google.com/jsapi"></
> > >> > > > > script>
> > >> > > > > <script type="text/javascript">google.load("gdata",
> > >> > > > > "1.10");</
> > >> > > > > script>
>
> > >> > > > > Or just use the auto-load feature of the JS API to collapse
> > >> > > > > these two
> > >> > > > > into a single script load.
>
> > >> > > > > But this wouldn't make use of the AjaxLoader module and it means
> > >> > > > > that
> > >> > > > > the GWT app will have to wait for the GData libraries to load
> > >> > > > > before
> > >> > > > > rendering, etc, instead of doing something like the following:
>
> > >> > > > > public void onModuleLoad() {
> > >> > > > > //render main app here
> > >> > > > > GData.loadGDataApi(null, new Runnable() {
> > >> > > > > public void run() {
> > >> > > > > initialize();
> > >> > > > > }
> > >> > > > > });
> > >> > > > > }
>
> > >> > > > > I don't know the reason for this behavior but it could happen if
> > >> > > > > the
> > >> > > > > gdata library uses document.write for example.
>
> > >> > > > > Bobby
>
> > >> > > > > On Jul 15, 1:30 am, Bobby <[email protected]> wrote:
> > >> > > > >> I'm adding the GData samples here as i go, if you want to see
> > >> > > > >> the
> > >> > > > >> library in
> > >> > > > >> action.http://1.latest.gwt-gdata.appspot.com/v/HelloGData.html
>
> > >> > > > >> Bobby
>
> > >> > > > >> On Jul 14, 9:54 am, Eric Ayers <[email protected]> wrote:
>
> > >> > > > >> > Thanks for the update.
>
> > >> > > > >> > On Mon, Jul 13, 2009 at 11:45 PM,
> > >> > > > >> > Bobby<[email protected]> wrote:
>
> > >> > > > >> > > Status update: the library is ready, i'm translating the
> > >> > > > >> > > various JS
> > >> > > > >> > > samples into GWT to include in the first download, using
> > >> > > > >> > > the same
> > >> > > > >> > > format as the Google Maps sample app which is contained the
> > >> > > > >> > > in the gwt-
> > >> > > > >> > > maps-1.0.4.zip available here:
> > >> > > > >> > >http://code.google.com/p/gwt-google-apis/wiki/Downloads?tm=2
>
> > >> > > > >> > > This is the fun part. :)
>
> > >> > > > >> > > Bobby
>
> > >> > > > >> > > On Jun 25, 8:20 am, Thomas Broyer <[email protected]>
> > >> > > > >> > > wrote:
> > >> > > > >> > >> On 25 juin, 08:32, Bobby <[email protected]> wrote:
>
> > >> > > > >> > >> > Actually, i've just noticed that the ArrayHelper in the
> > >> > > > >> > >> > AjaxLoader
> > >> > > > >> > >> > module provides the same functionality. Question though,
> > >> > > > >> > >> > when calling
> > >> > > > >> > >> > the fromArray() method from within a JSNI method, what's
> > >> > > > >> > >> > the parameter
> > >> > > > >> > >> > signature that should be used? I'm not having any luck
> > >> > > > >> > >> > with fromArray
> > >> > > > >> > >> > (Lcom/google/gwt/core/client/JavaScriptObject;).
>
> > >> > > > >> > >> > I want to transform the following:
> > >> > > > >> > >> > public final native void setProperties(JsArray<Property>
> > >> > > > >> > >> > properties) /
> > >> > > > >> > >> > *-{
> > >> > > > >> > >> > this.setProperties(
> > >> > > > >> > >> > properties
> > >> > > > >> > >> > );
>
> > >> > > > >> > >> > }-*/;
>
> > >> > > > >> > >> > Into the following:
>
> > >> > > > >> > >> > public final native void setProperties(Property[]
> > >> > > > >> > >> > properties) /*-{
> > >> > > > >> > >> > this.setProperties(
> > >> > > > >> > >> >
> > >> > > > >> > >> > @net.ltgt.gwt.jscollections.client.JsArrays::fromArray(Lcom/
> > >> > > > >> > >> > google/gwt/core/client/JavaScriptObject;)(properties)
> > >> > > > >> > >> > );
>
> > >> > > > >> > >> > }-*/;
>
> > >> > > > >> > >> I'd personally use an intermediate
> > >> > > > >> > >> setProperty(JsArray<Property>) and
> > >> > > > >> > >> call the fromArray in pure Java.
>
> > >> > > > >> > >> > But GWT complains about not being able to find the
> > >> > > > >> > >> > method with that
> > >> > > > >> > >> > signature.
>
> > >> > > > >> > >>http://code.google.com/webtoolkit/doc/1.6/DevGuideCodingBasics.html#D...
> > >> > > > >> > >> links
> > >> > > > >> > >> tohttp://java.sun.com/j2se/1.4.2/docs/guide/jni/spec/types.html#wp16432
> > >> > > > >> > >> which says to use:
>
> > >> > > > >> > >>
> > >> > > > >> > >> ...::fromArray([Lcom/google:gwt/core/client/JavaScriptObject;)
> > >> > > > >> > >> (properties)
>
> > >> > > > >> > >> (note the left square bracket before the L)
>
> > >> > > > >> > >> > Also, why are the ellipsis used?
>
> > >> > > > >> > >> to allow for uses such as fromArray("a", "b", "c") instead
> > >> > > > >> > >> of fromArray
> > >> > > > >> > >> (new String[] { "a", "b", "c" })
>
> > >> > > > >> > >> > Do they have a special purpose in GWT?
>
> > >> > > > >> > >> No (and as with generics, it's hardly more than syntactic
> > >> > > > >> > >> sugar, as
> > >> > > > >> > >> the "new String[]" is implied in the example above)
>
> > >> > > > >> > --
> > >> > > > >> > Eric Z. Ayers - GWT Team - Atlanta, GA
> > >> > > > >> > USAhttp://code.google.com/webtoolkit/
>
> > >> > > > --
> > >> > > > Google Code Jam 2009http://code.google.com/codejam
>
> > --
> > Google Code Jam 2009http://code.google.com/codejam
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Google Web Toolkit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/Google-Web-Toolkit?hl=en
-~----------~----~----~----~------~----~------~--~---