감사합니다, 나는 그냥 출력 빌드 스크립트에서 텍스트 교체하고 결국 다른 이름의 함수의 JS는 기본적으로 EVAL $을 eval로 바꾸고 모든 것이 압축 된 후에 수행됩니다. 여기에 내가 무엇을 발견, 나는 순수 JS 방법을 기대했다,하지만 너무 많은 다른 평가 브라우저 구현과, 그냥 디미타르의 대답에
만 평가하지만 기반 두는 것이 좋습니다 일부는 주위를 손보는. 는 이유처럼 보인다 이유 [ '평가'] 작동되지는 Mootools의 JSON.decode에서 일어나는 장소, 또한 내부 해시이기 때문이다 : 나는를 저장하는 경우, 그러나
var JSON = new Hash({
// snip snip
decode: function(string, secure){
if ($type(string) != 'string' || !string.length) return null;
if (secure && !(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''))) return null;
return this.eval('(' + string + ')'); // Firefox says: TypeError: this.eval is not a function
}
});
"최고 수준의"로컬 범위 (Mootools의를 포함한 모든 코드, 익명 함수 내에서 실행)를 선택한 다음, 그것을 작동 :
var TOP = this;
var JSON = new Hash({
// snip snip
decode: function(string, secure){
if ($type(string) != 'string' || !string.length) return null;
if (secure && !(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''))) return null;
return TOP.eval('(' + string + ')'); // All good, things run within the desired scope.
}
});
을하지만이 그래서 결론은, 사파리에서 작동하지 않습니다 내가 무엇을하려고했다 해야 할 일은 교차 호환으로 할 수 없습니다. eval은 특별한 까다로운 함수이며 모든 브라우저가 다르게 처리합니다.
'eval'은 일반적인 기능으로 간주되지 않으므로 엉망이되고 있습니다. YUI 컴프레서보다 현명 할 지 모르지만, 다른 이름으로'eval'을 호출하지 않거나 곧 호출하지 못하게하는 브라우저를 실행하게됩니다. –