无法通过侧边栏小工具进行设置

时间:2011-01-07 09:31:56

标签: javascript html windows-7 windows-desktop-gadgets

好的,我不是Sidebar Gadgets的专家,但我有这个项目,我将不得不为学校做。我试图自己解决它,但我真的陷入困境。

我将不得不使用Cirip API(Cirip.ro是一种Twitter),并且为了使用API​​,我必须输入用户名。我通过“设置”执行此操作,但在关闭设置时没有任何效果。

这是代码,但它非常混乱。我不是网络程序员,所以javascript / html对我来说是新的。

http://www.box.net/shared/7yogevhzrr


编辑:好的,所以我把它缩小了一点并在这里优化了我的代码,但它仍然无效。我已尽可能简单。

在主html中我有这个:

<script language="javascript">
    document.write(getUserName());
</script>

在gadget.js中:

var userName;

document.onreadystatechange = function DoInit() {

    document.body.style.width = 251;
    document.body.style.height= 351;
    document.body.style.margin=2;
    userName="danieliuhasz";
    System.Gadget.settingsUI = "settings.html";
    System.Gadget.onSettingsClosing = settingsClosed;

}

function setUserName(userNameSet){

    userName = userNameSet;
}

function getUserName(){

    return userName;
}

function settingsClosed()
{

    var username = System.Gadget.Settings.read("username");
    setUserName(username);
}

在settings.html中:

<body>

Username:<br />
<input name="userBox" type="text" maxlength="50" />
</body>

在settings.js中:

document.onreadystatechange = function DoInit()
{    

    if(document.readyState=="complete")
    {
        var user = System.Gadget.Settings.read("userName");

        if(user != "")
        {
            userBox.value = user;
        }       
    }        
}


System.Gadget.onSettingsClosing = function(event)
{

    if (event.closeAction == event.Action.commit)
    {
        var username = userBox.value;
        if(username != "")
        {
              System.Gadget.Settings.write("username", username);
              System.Gadget.document.parentWindow.settingsClosed();

        }
    }
}

我真的无法理解。这个输出是“未定义的”。

1 个答案:

答案 0 :(得分:2)

我在这台机器上没有RAR解包器,所以我无法查看该文件,但我可以给你一些关于保存设置的建议。如果您需要进一步的帮助,请尝试将代码粘贴到您的问题中(请参阅上面的评论)。

使用设置时,您需要在JavaScript代码中捕获System.Gadget.onSettingsClosing事件。在此事件处理程序中,您可以通过在小工具窗口中设置属性来临时设置,也可以使用System.Gadget.Settings.write存储设置,使其成为半永久性设置。假设您的用户名/密码html如下所示:

<label for="username">Username: </label><input id="username" type="text"><br/>
<label for="password">Password: </label><input id="password" type="password">

您的JavaScript应如下所示:

System.Gadget.onSettingsClosing = function (event) {
    // First, we need to make sure the user clicked the OK button to save
    if (event.closeAction == event.Action.commit) {
        // If they did, we need to store the settings
        var username = document.getElementById("username").value,
            password = document.getElementById("password").value;

        System.Gadget.Settings.write("username", username);
        System.Gadget.Settings.write("password", password);

        /* Finally, we can call a function defined in the main gadget window's
           JavaScript to let it know that the settings have changed */
        System.Gadget.document.parentWindow.settingsHaveChanged();
    }
}

在主要小工具的JavaScript中,settingsHaveChanged可能类似于以下函数:

function settingsHaveChanged () {
    var username = System.Gadget.Settings.read("username"),
        password = System.Gadget.Settings.read("password");

    sendAPIRequest(username, password);
}