Search code examples
javascriptwindowswindows-desktop-gadgets

Checking the value of System.Gadget.Flyout.file


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);
      });
    }
}

Solution

  • 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 :)