Javascript:无法创建新的隐藏输入元素

时间:2012-10-01 08:19:53

标签: javascript security

我按照here中的代码创建了一个安全的登录页面。麻烦的是,它无法创建隐藏的输入元素。

function formhash(form, password) {
    // Create a new element input, this will be out hashed password field.
    var p = document.createElement("input");
    // Add the new element to our form.
    form.appendChild(p);
    p.name = "p";
    p.type = "hidden"
    p.value = hex_sha512(password.value);
    // Make sure the plaintext password doesn't get sent.
    password.value = "";
    // Finally submit the form.
    form.submit();
}

我已经通读说它只适用于IE而不适用于gecko。这是真的还是我错过了什么?

更新

当我将javascript放入登录页面时,formhash功能起作用。当它移动到外部文件时,问题再次出现。

@asprin注意到。我放置php的原因是因为代码基于php实现

@Henrik会这样做。感谢

@RenePot Yup,它在process_login.php页面上被调用

@MarkGarcia感谢您的建议。请注意,它表示该函数未声明

@WernerVesterås不确定,但我想以后。

@Quentin感谢您的建议。会这样做:D

2 个答案:

答案 0 :(得分:1)

可能,form根本没有设置为你认为的,jsfiddle.net可能会帮助我们和你调试。我在http://jsfiddle.net/JPTyj/设置了一个工作版本。注释隐藏实际看到它有效。 请注意,您不会在浏览器的“查看源”中隐藏输入字段,因为它会动态添加到dom中!使用firebug或chrome dev工具查看它。

此外,您很可能希望使用库来更轻松地开发独立于平台的代码,而不是编写简单的javascript。

答案 1 :(得分:0)

在IE8(至少)中,您需要设置type属性,然后才能使用setAttribute()附加它:

var p = document.createElement("input");
p.setAttribute("type", "hidden");
form.appendChild(p);

http://jsfiddle.net/BePGD/在IE7,IE8,Chrome中测试过。