0

我的飞出有问题。我的小工具会发生什么,你双击一个组件,它将有一个相应的弹出窗口。但是,如果您双击该组件或任何其他带有浮出控件的可视组件,则浮出控件文档将返回为 null。我不知道为什么会这样,如果您使弹出菜单消失并重新打开它或重新打开它就可以了。只有当弹出窗口已经打开时才会发生这种情况。我正在寻找一些关于为什么会这样的想法。

双击代码:

Blah.prototype.ondblclick = function()
{

    var me = this.parent;

    if (System.Gadget.Flyout.show)
    {
        // flyout is already shown, make sure it shows our stuff
        System.Gadget.Flyout.file = FLYOUT_FILE;
        onFlyoutShow();
    }
    else
    {
        System.Gadget.Flyout.file = FLYOUT_FILE;
        System.Gadget.Flyout.onShow = onFlyoutShow;
        System.Gadget.Flyout.show = true;
    }
    System.Gadget.Flyout.onHide = onFlyoutHide;

    function onFlyoutShow()
    {
        me.flyoutOpen = true;
        me.updateFlyout();
    }

    function onFlyoutHide()
    {
        me.flyoutOpen = false;
    }
};

执行代码:

Blah.prototype.updateFlyout = function ()
{
    var flyoutDoc = System.Gadget.Flyout.document;
    //flyoutDoc is null at this point
    var info = flyoutDoc.getElementById("info");
    info.innerHTML = "info: " + this.information;
    //Error thrown: 'null' is null or not an object
}
4

1 回答 1

1

我不太了解为 Windows 7 编写小工具,但对我来说,这看起来很像时间问题。当弹出窗口已经存在时,您更改file告诉它加载新文件的属性。无需等待,您就可以调用onFlyoutShowwhich 尝试获取文档并且该文档尚未加载

  • 我的第一个想法是:onShow设置文件时不会触发事件吗?可能没有,或者你不会有如果,但值得验证。
  • 如果这不起作用,请调用onFlyoutShow超时。从一个长计时器开始,比如 1000。然后缩短它,希望你能降到 0:setTimeout(onFlyoutShow, 0);
于 2011-01-21T21:20:37.950 回答