Javascript Microsoft JScript运行时错误对象不存在';不支持此属性或方法

Javascript Microsoft JScript运行时错误对象不存在';不支持此属性或方法,javascript,Javascript,因此,我试图在javascript中调用此函数,但它给了我一个错误“MicrosoftJScript运行时错误对象不支持此属性或方法”,我不明白为什么。在尝试调用hmacObj.getHMAC时发生。这来自jsSHA网站:使用hmac-sha1加密算法。谢谢大家! hmacObj = new jsSHA(signature_base_string,"HEX"); signature = hmacObj.getHMAC(signature_key,"HEX","SHA-1","HEX"); 在

因此,我试图在javascript中调用此函数,但它给了我一个错误“MicrosoftJScript运行时错误对象不支持此属性或方法”,我不明白为什么。在尝试调用hmacObj.getHMAC时发生。这来自jsSHA网站:使用hmac-sha1加密算法。谢谢大家!

hmacObj = new jsSHA(signature_base_string,"HEX");

signature = hmacObj.getHMAC(signature_key,"HEX","SHA-1","HEX");
在上面,我从sha.js复制了代码

片段:

function jsSHA(srcString, inputFormat) {

 /*
  * Configurable variables. Defaults typically work
  */
 jsSHA.charSize = 8; // Number of Bits Per character (8 for ASCII, 16 for Unicode)
 jsSHA.b64pad  = ""; // base-64 pad character. "=" for strict RFC compliance
 jsSHA.hexCase = 0; // hex output format. 0 - lowercase; 1 - uppercase

 var sha1 = null;
 var sha224 = null;
它正在调用的函数(在jsSHA函数内部)

this.getHMAC=函数(键、inputFormat、变量、outputFormat){
var formatFunc=null;
var-keyToUse=null;
var blockByteSize=null;
var blockBitSize=null;
var keyWithIPad=[];
var keyWithOPad=[];
var lastArrayIndex=null;
var-retVal=null;
var-keyBinLen=null;
var hashBitSize=null;
//验证输出格式选择
开关(输出格式){
案例“十六进制”:
formatFunc=binb2hex;
打破
案例“B64”:
formatFunc=binb2b64;
打破
违约:
返回“格式不可识别”;
}
//验证哈希变量选择并设置所需的变量
开关(变型){
案例“SHA-1”:
blockByteSize=64;
hashBitSize=160;
打破
案例“SHA-224”:
blockByteSize=64;
hashBitSize=224;
打破
案例“SHA-256”:
blockByteSize=64;
hashBitSize=256;
打破
案例“SHA-384”:
blockByteSize=128;
hashBitSize=384;
打破
案例“SHA-512”:
blockByteSize=128;
hashBitSize=512;
打破
违约:
返回“未识别哈希”;
}
//验证输入格式选择
如果(“十六进制”==输入格式){
//小吃必须成对来
如果(0!==(key.length%2)){
return“键必须以字节为增量”;
}
keyToUse=hex2binb(键);
keyBinLen=key.length*4;
}else if(“ASCII”==输入格式){
keyToUse=str2binb(键);
keyBinLen=key.length*jsSHA.charSize;
}否则{
返回“未知键输入类型”;
}
//这些数据被多次使用,计算并存储它们
blockBitSize=blockByteSize*8;
lastArrayIndex=(blockByteSize/4)-1;
//根据键相对于的大小,找出如何处理键
//散列的块大小
如果(块字节大小<(按键长度/8)){
如果(“SHA-1”==变量){
keyToUse=coreSHA1(keyToUse,keyBinLen);
}否则{
keyToUse=coreSHA2(keyToUse,keyBinLen,变体);
}
//对于所有变体,块大小都大于输出大小
//因此,字符串的末尾永远不会有有用的字节
keyToUse[lastArrayIndex]&=0xFFFFFF00;
}否则如果(blockByteSize>(keyBinLen/8)){
//如果blockByteSize大于密钥长度,则将
//始终在字符串末尾至少有一个“无用”字节
keyToUse[lastArrayIndex]&=0xFFFFFF00;
}
//创建ipad和opad

对于(var i=0;i,所以我发现当我实例化对象时,它并没有在其中创建实际的函数。通过一些调整,我能够让它显示并能够调用函数


还注意到调用Object.getHMAC(String,String,String,String)并不总是理解字符串与其函数兼容。感谢所有帮助您的人。(John&Sean)

您确定在此之前没有抛出错误吗?我有日志记录来显示。整个函数定义都在这个错误上面。2010-06-01 14:36:22 T08A0错误-scriptedtest.cpp(102)-Script:scripts/BuildOAuthTwitterRequest.js at.失败。错误:Microsoft JScript运行时错误对象不支持此属性或方法,EXCEPINFO.scode=0x800a01b6(FormatMessage()错误317(0x13d)翻译错误2148139446(0x800a01b6))--------------------------------------signature=hmacObj.getHMAC(signature_key,“HEX”,“SHA-1”,“脚本”\Buffs\BudidoAuthTwitter Realest.jsFube,您使用Firebug或IE开发者工具进入GethMAC,很好地,脚本是通过C++运行的,所以它不是在IE或Firefox中看到的,它的工作很好,它可以通过输出日志文件输出输出HTTP请求。
this.getHMAC = function (key, inputFormat, variant, outputFormat) {
        var formatFunc = null;
        var keyToUse = null;
        var blockByteSize = null;
        var blockBitSize = null;
        var keyWithIPad = [];
        var keyWithOPad = [];
        var lastArrayIndex = null;
        var retVal = null;
        var keyBinLen = null;
        var hashBitSize = null;

        // Validate the output format selection
        switch (outputFormat) {
        case "HEX":
            formatFunc = binb2hex;
            break;
        case "B64":
            formatFunc = binb2b64;
            break;
        default:
            return "FORMAT NOT RECOGNIZED";
        }

        // Validate the hash variant selection and set needed variables
        switch (variant) {
        case "SHA-1":
            blockByteSize = 64;
            hashBitSize = 160;
            break;
        case "SHA-224":
            blockByteSize = 64;
            hashBitSize = 224;
            break;
        case "SHA-256":
            blockByteSize = 64;
            hashBitSize = 256;
            break;
        case "SHA-384":
            blockByteSize = 128;
            hashBitSize = 384;
            break;
        case "SHA-512":
            blockByteSize = 128;
            hashBitSize = 512;
            break;
        default:
            return "HASH NOT RECOGNIZED";
        }

        // Validate input format selection
        if ("HEX" === inputFormat) {
            // Nibbles must come in pairs
            if (0 !== (key.length % 2)) {
                return "KEY MUST BE IN BYTE INCREMENTS";
            }
            keyToUse = hex2binb(key);
            keyBinLen = key.length * 4;
        } else if ("ASCII" === inputFormat) {
            keyToUse = str2binb(key);
            keyBinLen = key.length * jsSHA.charSize;
        } else {
            return "UNKNOWN KEY INPUT TYPE";
        }

        // These are used multiple times, calculate and store them
        blockBitSize = blockByteSize * 8;
        lastArrayIndex = (blockByteSize / 4) - 1;

        // Figure out what to do with the key based on its size relative to
        // the hash's block size
        if (blockByteSize < (keyBinLen / 8)) {
            if ("SHA-1" === variant) {
                keyToUse = coreSHA1(keyToUse, keyBinLen);
            } else {
                keyToUse = coreSHA2(keyToUse, keyBinLen, variant);
            }
            // For all variants, the block size is bigger than the output size
            // so there will never be a useful byte at the end of the string
            keyToUse[lastArrayIndex] &= 0xFFFFFF00;
        } else if (blockByteSize > (keyBinLen / 8)) {
            // If the blockByteSize is greater than the key length, there will
            // always be at LEAST one "useless" byte at the end of the string
            keyToUse[lastArrayIndex] &= 0xFFFFFF00;
        }

        // Create ipad and opad
        for (var i = 0; i <= lastArrayIndex; i++) {
            keyWithIPad[i] = keyToUse[i] ^ 0x36363636;
            keyWithOPad[i] = keyToUse[i] ^ 0x5C5C5C5C;
        }

        // Calculate the HMAC
        if ("SHA-1" === variant) {
            retVal = coreSHA1(keyWithIPad.concat(strToHash), blockBitSize + strBinLen);
            retVal = coreSHA1(keyWithOPad.concat(retVal), blockBitSize + hashBitSize);
        } else {
            retVal = coreSHA2(keyWithIPad.concat(strToHash), blockBitSize + strBinLen, variant);
            retVal = coreSHA2(keyWithOPad.concat(retVal), blockBitSize + hashBitSize, variant);
        }

        return (formatFunc(retVal));
    };