使用“请求”时“已使用此窗口小部件ID”

时间:2013-04-28 13:20:20

标签: javascript firefox-addon-sdk

我需要在每个页面上检查request的内容,并在数据正确时加载小部件。

问题很奇怪 - 我第二次重新加载页面时,widget被加载两次。

var widgets = require("widget");
var self = require("self");
var tabs = require("tabs").on("ready", start_script);
var request = require("request").Request;

function start_script(argument) 
{
    request({
        // checking something
        url: "http://localhost/check.php",
        onComplete: function (response) 
        {
            if ( typeof widget == "undefined" )
            {
                // make widget
                var widget = widgets.Widget({
                    id: "xxxxxxxx",
                    label: "zzzzz",
                    contentURL: self.data.url("http://www.google.com/favicon.ico")
                });
            }
        }
    }).get();
}

适用于第一页。重新加载后,它会抛出错误:This widget ID is already used: xxxxxxxx

为什么它第二次加载小部件,即使我有if ( typeof widget == "undefined" )

如果我没有request,那么一切都很顺利。 request改变了什么?

1 个答案:

答案 0 :(得分:3)

因为变量widget尚未在if条件中定义/未知。您需要使用适当的范围。

您可以尝试:

var widgets = require("widget");
var self = require("self");
var tabs = require("tabs").on("ready", start_script);
var request = require("request").Request;
var widget; //define widget here so that it is visible in the if condition.

function start_script(argument) 
{
    request({
        // checking something
        url: "http://localhost/check.php",
        onComplete: function (response) 
        {
            if ( typeof widget == "undefined" )  //using the variable here
            {
                // make widget
                widget = widgets.Widget({
                    id: "xxxxxxxx",
                    label: "zzzzz",
                    contentURL: self.data.url("http://www.google.com/favicon.ico")
                });
            }
        }
    }).get();
}

检查xxxxxxxx条件中是否存在标识为if的窗口小部件。