Search code examples
javascriptopensocialgoogle-gadget

Google Gadget canvas view unable to talk to gadgets.views or .params until refresh?


I've been working on a gadget that will run in iGoogle. In fact, it's finished, aside from a nasty bug that we're having a nightmare of a time hunting down.

Note that the code snippets are in CoffeeScript; it's compiled to JS before we host it up for Google. We're also using Backbone.js for our code, but that shouldn't make much difference as all of our Backbone-specific code (initialize methods and so forth) work just fine; I've been able to isolate the problem parts of the code outside of our Backbone stuff.

The gadget saves a list of preferred options to Google's gadgets.prefs object, as a pipe-delimited string (55|34|101).

prefs = new gadgets.Prefs()
prefs.set('paramname','55|34|101')

This save happens just fine, and any subsequent call to get that pref works just fine. They're even readable by a prefs.get call in the home view. It's when switching from the home view to the canvas view that the gadget isn't able to get those preferences (from the canvas view).

prefs = new gadgets.Prefs()
prefs.get('paramname')

Only once you do a Refresh on the whole canvas view page will the gadget retrieve those preferred options.

Now get this: we've tried passing these preferences as params between the home and the canvas view as well.

(home view)
params = 
    'paramname': '55|34|101'
gadgets.views.requestNavigateTo('canvas', params)

(canvas view)
@params = gadgets.views.getParams()

This successfully sends us to canvas, but after switching home to canvas and trying to talk to gadgets.views.getParams(), an empty object is returned. Only once a Refresh is done does the gadget process that same call, find the params, and use them.

In both views, the last piece of code run is…

gadgets.util.registerOnLoadHandler init

Which calls our init() function…

init = ->
    @params = gadgets.views.getParams()

…which returns an empty object, unless we refresh the page.

Any idea why this is happening? Am I not "kickstarting" the gadgets.* stuff properly? It's almost like I'm talking to a gadgets.* object that's not "bound" to my particular gadget, until I refresh the page (which then forces it to bind to the canvas view). Please help!


Solution

  • As it seems, it's an issue with Google's new AJAX loading technology used in switching between home/canvas views. We contacted Google's iGoogle/OpenSocial team and that's the response we got. They were able to reproduce the bug with a gadget of their own. Until they fix it, accessing iGoogle with http://google.com/ig?aig=0 should band-aid the issue.