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!
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.