views:

428

answers:

1

I've been working on a Windows SideBar Gadget wherein I have multiple flyout pages. When I go to display one, I want to check if it is already active or not, so I thought I could just check the value of System.Gadget.Flyout.file. However, when I press the button control that causes this flyout to pop out, the background of the gadget disappears. In my debug messages, I've found that the script halts where this line is.

Here is the line in question:

if (!System.Gadget.Flyout.show && System.Gadget.Flyout.file != "results.html")
{
    ....
}

This is quite odd, as I can set the file but not check it. And looking at the MSDN documentation the file property is both a getter and a setter, so there should be no problem. Anyone have a solution I could use to check what file/document is currently active?

Edit - Here is a more detailed look at the code:

function ShowResults(event)
{    
    var searchString = $.trim($("#searchInput").val());

    if (!System.Gadget.Flyout.show || !gFlyoutResultsAreVisible)
    {
      // Load up the results page into the flyout
      System.Gadget.Flyout.file = "results.html";
      System.Gadget.Flyout.show = true;

      System.Gadget.Flyout.document.parentWindow.attachEvent("onload", function()
      {
        System.Gadget.Flyout.document.parentWindow.PerformSearch(searchString);
      });
    }
}
A: 

It's unlikely that piece of code is causing the issue. Still, you could try something like the following:

if (System.Gadget.Flyout.document && System.Gadget.Flyout.file != "results.html")
{
    ....
}

If that doesn't help and you haven't managed to sort it yourself yet, please post a little more code so I can get a better understanding what's going on.

UPDATED

Ahh I see now. Sorry, I should have tested this further when I added my original answer. I assumed System.Gadget.Flyout.file was a read/write property, but of course that would only make too much sense. The file property of System.Gadget.Flyout is actually write only.

As a workaround, I would use the following:

var FlyDoc = System.Gadget.Flyout.document;
if (FlyDoc && FlyDoc.location == "x-gadget:///results.html")
{
    ...
}

It's likely that I ran into this bug in 2006, as I've written the above code before, so please forgive me for completely forgetting about this issue and not posting the correct solution when I originally attempted to answer this question :)

Andy E
Unfortunately, that still has some issue. As soon as I put in the check for System.Gadget.Flyout.file != "results.html", and the gadget runs that section of code, it breaks.In the meantime I have added my own variable flyoutResultsAreVisible, which I set manually when opening the results flyout. See my edited post for more detailed code.
Toasty Justice
Sorry, my fault. I forgot that System.Gadget.Flyout.file is **write-only**, meaning it has no get and will throw an error if you try and read the value. The documentation actually specifies the property as read/write (get and set). A big "whoops" on Microsoft's part. See my updated answer for the work-around and I'll update my comment on System.Gadget.Flyout.file in the MS docs :)
Andy E