2013-05-14 2 views
0

난독 화 코드 발생 오류 "SyntaxError : missing : after property id".SyntaxError : missing : after 속성 ID - 난독 화 후

코드는 lint에서 확인되고 오류나 경고없이 전달됩니다. 내가 잘못

enter image description here

을하고 있어요 무엇 :이 오류 보고서입니다

var pgetColor = { 
'AB': '#CAD17D', 
'BC': '#7DD1AE', 
'CL': '#919AFF', 
'CI': '#FFE291', 
'HB': '#84DBD5', 
'ON': '#AA84DB', 
'PM': '#DB848A', 
'SR': '#B5DB84', 
'TS': '#C96B9B', 
'IS': '#FFC926', 
'FREE': '#5FCF68' 
}; 

:

(이 매우 첫 번째 줄은 문서를 JS도) 원래 코드 ?

+2

난독 화 코드를 미화하고 jsHint로 테스트하여 그것이 난독 화 코드인지 확인하십시오 (이는 난독 화 구현이 잘못되었음을 의미 함). 단지 팁 : 난독 화가 도움이되지 않습니다. 처리에 추가됩니다. 축소/uglifying 더 좋을 것이다. – Joseph

+0

해당 코드를 난독 화하기 위해 사용하는 도구는 무엇입니까? –

+1

그래, 그건 구문 오류예요, 당신은 그곳에'['를 가질 수 없습니다. 나는 다른 obfuscator를 사용할 것이다. –

답변

2

이것은 the obfuscator you're using의 버그입니다. 귀하의 코드

var pgetColor = { 
'AB': '#CAD17D', 
'BC': '#7DD1AE', 
'CL': '#919AFF', 
'CI': '#FFE291', 
'HB': '#84DBD5', 
'ON': '#AA84DB', 
'PM': '#DB848A', 
'SR': '#B5DB84', 
'TS': '#C96B9B', 
'IS': '#FFC926', 
'FREE': '#5FCF68' 
}; 

이로 바뀌지고 (나는 줄 바꿈을 추가) :

var _0x5523=["\x41\x42","\x23\x43\x41\x44\x31\x37\x44","\x42\x43","\x23\x37\x44\x44\x31\x41\x45","\x43\x4C","\x23\x39\x31\x39\x41\x46\x46","\x43\x49","\x23\x46\x46\x45\x32\x39\x31","\x48\x42","\x23\x38\x34\x44\x42\x44\x35","\x4F\x4E","\x23\x41\x41\x38\x34\x44\x42","\x50\x4D","\x23\x44\x42\x38\x34\x38\x41","\x53\x52","\x23\x42\x35\x44\x42\x38\x34","\x54\x53","\x23\x43\x39\x36\x42\x39\x42","\x49\x53","\x23\x46\x46\x43\x39\x32\x36","\x46\x52\x45\x45","\x23\x35\x46\x43\x46\x36\x38"]; 
var pgetColor={_0x5523[0]:_0x5523[1],_0x5523[2]:_0x5523[3],_0x5523[4]:_0x5523[5],_0x5523[6]:_0x5523[7],_0x5523[8]:_0x5523[9],_0x5523[10]:_0x5523[11],_0x5523[12]:_0x5523[13],_0x5523[14]:_0x5523[15],_0x5523[16]:_0x5523[17],_0x5523[18]:_0x5523[19],_0x5523[20]:_0x5523[21]}; 
// ------------^^^^^^^^^^ 
//    This is wrong (as are the ones that follow) 

그것은 개체 이니셜 라이저에서 속성 이름으로 _0x5523[0]을 가지고 무효입니다. :   —의 왼쪽에있는 속성 이름 리터럴 대신 문자열 리터럴을 사용하여 혼동스럽게 생각하는 것 같습니다. 문자열 대체가 너무 과식되었습니다. ("문자열 리터럴"대 "속성 이름 리터럴"의 의미를 이해하지 못했다면 아래를보십시오.) 당신이하고있는 일이 완벽하고 정확하고 까다롭기 때문에 난독 화가의 버그입니다.

다른 obfuscator를 사용하거나 더 나은 방법으로는 Closure compiler과 같은 컴파일러를 사용합니다.

내가 대신 속성 이름 리터럴 사용하도록 코드를 변경하는 경우

:

var _0x8d33=["\x23\x43\x41\x44\x31\x37\x44","\x23\x37\x44\x44\x31\x41\x45","\x23\x39\x31\x39\x41\x46\x46","\x23\x46\x46\x45\x32\x39\x31","\x23\x38\x34\x44\x42\x44\x35","\x23\x41\x41\x38\x34\x44\x42","\x23\x44\x42\x38\x34\x38\x41","\x23\x42\x35\x44\x42\x38\x34","\x23\x43\x39\x36\x42\x39\x42","\x23\x46\x46\x43\x39\x32\x36","\x23\x35\x46\x43\x46\x36\x38"]; 
var pgetColor={AB:_0x8d33[0],BC:_0x8d33[1],CL:_0x8d33[2],CI:_0x8d33[3],HB:_0x8d33[4],ON:_0x8d33[5],PM:_0x8d33[6],SR:_0x8d33[7],TS:_0x8d33[8],IS:_0x8d33[9],FREE:_0x8d33[10]}; 

하지만 당신이 정말로 사용하려는 경우가 있습니다 :

var pgetColor = { 
AB: '#CAD17D', 
BC: '#7DD1AE', 
CL: '#919AFF', 
CI: '#FFE291', 
HB: '#84DBD5', 
ON: '#AA84DB', 
PM: '#DB848A', 
SR: '#B5DB84', 
TS: '#C96B9B', 
IS: '#FFC926', 
FREE: '#5FCF68' 
}; 

을 ... 결과는 괜찮습니다 속성 이름의 문자열 리터럴 (예 : 속성 이름에 공백이 있거나 예약어 인 경우)

+0

와우 ... 고마워요 선생님 – dllhell

+1

@dllhell : 걱정 마세요, 도움이 되니 기쁩니다! (당신은 버그 리포트를 버리길 원할 것입니다. 당신의 질문과이 대답은 그들이 필요로하는 모든 정보를 가지고 있습니다 ...) –