That's true, using set prefs from script in the inner iframe won't work as far as I know.
If a gadget also sets preferences then they may be able to read the content of the page and place it inside a div. This should allow access to the API to set preferences. The thing is the content of the page may include a root html element which could cause issues on some browsers when inserted in a div. So if that's the case developers might want to tailor the server side script that delivers the page. Rob Russell Google Developer Relations On Thu, Apr 22, 2010 at 1:19 AM, Edouard Fattal <[email protected]> wrote: > Be careful, this method can only help to read the preferences but the JS > code in the iframe will be unable to modify the preferences. > > > 2010/4/22 Gavin McDonald <[email protected]> > > Rob, >> >> This is an acceptable method to restore service to my broken gadget, and >> thanks to your team for being proactive to find a solution. >> >> Regards, >> -G >> >> Gavin McDonald >> EVI Logistic Enterprises >> 604-313-3845 - VE7HXR >> >> >> >> On Wed, Apr 21, 2010 at 7:02 PM, Rob Russell <[email protected]>wrote: >> >>> I spent some time today, with the help of other developers on the iGoogle >>> team, coming up with a way to adapt an arbitrary gadget that relies on the >>> way user prefs used to be supplied with the url in type="url" gadgets. A >>> gadget ideally only needs the gadget API, and shouldn't rely on the way >>> iGoogle sends (or doesn't send) parameters in the URL query string. >>> >>> Keep in mind that what I'm suggesting is just one way to adapt such a >>> gadget, it's up to individual gadget developers to detemine what works for >>> them. I have used this to adapt one of the reported gadgets and it seems to >>> work fine. >>> >>> The crux of the idea is that instead of supplying an external page to >>> wrap, we use a type=html gadget and request the page that we want wrapped >>> after the gadget loads. The wrapping gadget will be cached by iGoogle. You >>> can consider this code a template and adapt it if you'd like to include a >>> loading animation or message for the user in case your server takes some >>> time to respond. >>> >>> I've tested this with sample data in IE6 on Windows and on Firefox. It is >>> just an example though and I encourage anyone that sees room for improvement >>> to chime in. >>> >>> The UserPrefs elements are the same as for the existing Content type=url >>> section, as are the Module and ModulePrefs elements. >>> >>> In the Javascript, the wrappeduserprefs variable is an array of the >>> values of name attributes from the UserPref elements. So for this pretend >>> gadget, it has prefs myname and mycolor. The type of the UserPref doesn't >>> matter. The wrappedpage variable is the url of the page that your Content >>> type=url gadget pointed at - that is the value of the href attribute on the >>> Content element. >>> >>> If your server code doesn't need the "up_" prefix on the parameter name >>> then change (most will but it could be a chance to clean up some server side >>> cruft) >>> params["up_"+userprefs[key]] = prefs.getArray(userprefs[key]); >>> to >>> params[userprefs[key]] = prefs.getArray(userprefs[key]); >>> >>> Here's the code >>> >>> <?xml version="1.0" encoding="UTF-8"?> >>> <Module> >>> <ModulePrefs title="example url iframed" /> >>> <UserPref name="myname" display_name="Name" default_value=""/> >>> <UserPref name="mycolor" display_name="Color" default_value="Red" >>> datatype="enum" > >>> <EnumValue value="Red" /> >>> <EnumValue value="Blue" /> >>> </UserPref> >>> <Content type="html"> >>> <![CDATA[ >>> <script type="text/javascript"> >>> var wrappedpage = "http://example.com/mygadget.php"; >>> var wrappeduserprefs = ["myname","mycolor"]; >>> >>> var prefs = new gadgets.Prefs(); >>> var params = {}; >>> >>> function init() { >>> for (key in wrappeduserprefs) { >>> params["up_"+wrappeduserprefs[key]] = >>> prefs.getArray(wrappeduserprefs[key]); >>> } >>> >>> document.getElementById("wrapped").src = wrappedpage + "?" + >>> gadgets.io.encodeValues(params); >>> } >>> >>> gadgets.util.registerOnLoadHandler(init); >>> </script> >>> <style> >>> body { >>> margin: 0; >>> padding: 0; >>> overflow: hidden; >>> } >>> </style> >>> <iframe src="" name="wrapped" id="wrapped" width="100%" height="200px" >>> style="border:none; margin:0; overflow:hidden; padding:0;" scrolling="no" >>> frameborder=0 > >>> </iframe> >>> ]]> >>> </Content> >>> </Module> >>> >>> >>> Rob Russell >>> Google Developer Relations >>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "iGoogle Developer Forum" group. >>> To post to this group, send email to [email protected] >>> . >>> To unsubscribe from this group, send email to >>> [email protected]<google-gadgets-api%[email protected]> >>> . >>> For more options, visit this group at >>> http://groups.google.com/group/Google-Gadgets-API?hl=en. >>> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "iGoogle Developer Forum" group. >> To post to this group, send email to [email protected]. >> To unsubscribe from this group, send email to >> [email protected]<google-gadgets-api%[email protected]> >> . >> For more options, visit this group at >> http://groups.google.com/group/Google-Gadgets-API?hl=en. >> > > -- > You received this message because you are subscribed to the Google Groups > "iGoogle Developer Forum" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]<google-gadgets-api%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/Google-Gadgets-API?hl=en. > -- You received this message because you are subscribed to the Google Groups "iGoogle Developer Forum" 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-Gadgets-API?hl=en.
