Version 1.10.1 is available here: http://code.google.com/p/gwt-gdata/downloads/list
Bobby On Aug 14, 4:53 am, Bobby <[email protected]> wrote: > I may not be able to correct this IE bug, and it may not be desirable > either since it isn't a good idea to have the GWT version introduce > hacks onto the JS library in order to fix a bug - stuff like this is > better off being corrected in the JS version directly. I'll add this > as a defect and deal with it later, the workaround being to use a > script reference to load the API. > > I'm starting to think about how to detach the GWT library from the JS > api in the future. Here's what i'm seeing, in the JS API all GData > operations (POST, PUT, DELETE) are sent as POST commands. A POST > variable called HTTP-Method-Override can be used to specify the actual > operation. Cross-domain POSTS aren't a problem, we can just create and > submit a hidden form using some JavaScript. > > Since GData supports retrieving data in JSON format, we can use a > JSONP approach to do cross domain reads - this is what the current JS > API does. > > This means that in order to detach the GWT version from the JS > libraries we have to: > 1. identify the Atom schema for each data type, there are a few > hundred classes. > 2. provide a base implementation that can perform cross-domain POSTS > and JSONP reads. > > I think #1 can be automated and #2 is sensitive but small. > > The end result will be a more GWT-optimizable API which can then grow > at its own pace. The samples and unit tests wouldn't change > significantly, if at all. We can still use overlay types to wrap > around the JSON objects returned from GData. I've taken a closer look > at the GData Java library and i don't think that the GWT and Java APIs > will ever match because the GWT version will need to be callback-based > whereas Java doesn't have this limitation. > > Anyway, just some thoughts. > > Bobby > > On Aug 14, 2:53 am, Bobby <[email protected]> wrote: > > > 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 > > ... > > read more » --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
