IOS 7에서 도입 된 새로운 JavaScriptCore.framework Objective-C API를 통해 Java 7을 내 IOS 7 응용 프로그램에 임베드합니다.JavaScriptCore.framework IOS 7과 함께 소개 된 Objective-C API는 나쁜 NSDate 변환을 제공합니다. (버그 :
Objective-C와 Javascript 사이의 잘 통합 된 브리지에 대한 소개를 보려면 Apple 개발자 네트워크의 WWDC 소개 "JavaScript를 기본 응용 프로그램에 통합"세션을 확인하십시오. https://developer.apple.com/wwdc/videos/?id=615.
편집 : WWDC 2013의 비디오 컬렉션이 지금 여기에 이동 : https://developer.apple.com/videos/wwdc/2013/?id=615는
내가 가진 문제는 내있는 NSDate 객체 (모두 인수를 전달하고 직접 자바 스크립트 변수를 설정)입니다 심하게 자바 스크립트 날짜로 변환 할 것으로 보인다. 날짜는 자바 스크립트 내부 다른입니다
2014-01-24 14:42:08.019 yhere[70180:70b] myDate = Fri Jan 24 2014 14:42:08 GMT+1100
2014-01-24 14:42:08.019 yhere[70180:70b] Javascript log: date1 = Sat Jan 17 1970 13:15:34 GMT+1100 (EST)
2014-01-24 14:42:08.020 yhere[70180:70b] Javascript log: dateArg = Sat Jan 17 1970 13:15:34 GMT+1100 (EST)
2014-01-24 14:42:08.020 yhere[70180:70b] javascriptDate = Fri Jan 24 2014 14:42:08 GMT+1100
참고 : 다음과 같은 로그를 생성
self.javascriptContext[@"consoleLog"] = ^(NSString *message) {
NSLog(@"Javascript log: %@",message);
};
NSDate *myDate = [NSDate date];
NSDateFormatter *dateFormatter = [NSDateFormatter new];
[dateFormatter setDateFormat:@"EEE MMM dd yyyy HH:mm:ss 'GMT'ZZZ"]; // Show in same format as javascript
NSLog(@"myDate = %@", [dateFormatter stringFromDate:myDate]);
self.javascriptContext[@"date1"] = myDate;
[self.javascriptContext evaluateScript:@"var myDateFn = function(dateArg) { consoleLog(\"date1 = \" + date1); consoleLog(\"dateArg = \" + dateArg); return dateArg };"];
JSValue *function = self.javascriptContext[@"myDateFn"];
NSArray *argList = [NSArray arrayWithObjects:myDate, nil];
JSValue *result = [function callWithArguments:argList];
NSDate *javascriptDate = [result toDate];
NSLog(@"javascriptDate = %@", [dateFormatter stringFromDate:javascriptDate]);
: 여기에 내 코드입니다. 나는 체크했다. 예외 나 자바 스크립트 코드 내에서 발생하는 다른 에러가 없다. (명확성을 위해 여기에 예외 처리를 포함하지 않았다.)
내가 바보 같은 짓을 한 경우, 그렇지 않으면 프레임 워크가 사실 수 있도록 잊어 버린 경우 그것은 거의 자바 스크립트 날짜를 측정하는 것과 JavaScriptCore.framework
에 버그가 있다는 사실을 나에게 보인다 확인하시기 바랍니다 밀리 초 1970 년 이후보다는 초에서 사용하는 1970 가입일 : 다음 모든 내가 출구에서 1000 자바 스크립트 및 분할에 전달하기 전에 1000 배 더 큰 날짜를 강제하는 경우
(아래 코드를 참조)있는 NSDate dateWithTimeIntervalSince1970] 날짜가 정확합니다 (즉, 같은 날짜).
NSDate *myDate = [NSDate date];
NSDateFormatter *dateFormatter = [NSDateFormatter new];
[dateFormatter setDateFormat:@"EEE MMM dd yyyy HH:mm:ss 'GMT'ZZZ"]; // Show in same format as javascript
NSLog(@"myDate = %@", [dateFormatter stringFromDate:myDate]);
myDate = [NSDate dateWithTimeIntervalSince1970:[myDate timeIntervalSince1970]*1000]; // Workaround BUG
self.javascriptContext[@"date1"] = myDate;
[self.javascriptContext evaluateScript:@"var myDateFn = function(dateArg) { consoleLog(\"date1 = \" + date1); consoleLog(\"dateArg = \" + dateArg); return dateArg };"];
JSValue *function = self.javascriptContext[@"myDateFn"];
NSArray *argList = [NSArray arrayWithObjects:myDate, nil];
JSValue *result = [function callWithArguments:argList];
NSDate *javascriptDate = [result toDate];
javascriptDate = [NSDate dateWithTimeIntervalSince1970:[javascriptDate timeIntervalSince1970]/1000]; // Workaround BUG
NSLog(@"javascriptDate = %@", [dateFormatter stringFromDate:javascriptDate]);
업데이트 로그 :이 (15920754)에 대한 버그 리포트를 제기
2014-01-24 14:43:44.156 yhere[70180:70b] myDate = Fri Jan 24 2014 14:43:44 GMT+1100
2014-01-24 14:43:44.157 yhere[70180:70b] Javascript log: date1 = Fri Jan 24 2014 14:43:44 GMT+1100 (EST)
2014-01-24 14:43:44.157 yhere[70180:70b] Javascript log: dateArg = Fri Jan 24 2014 14:43:44 GMT+1100 (EST)
2014-01-24 14:43:44.158 yhere[70180:70b] javascriptDate = Fri Jan 24 2014 14:43:44 GMT+1100
. 아무도 이것이 버그가 아니며 내가 잘못한 것을했다고 생각합니까?
에서이 문제를 해결 한 나는 그것이 버그 생각하지 않습니다. Apple의 두 번째 기준 시간 표준은 다른 모든 사람의 밀리 초 기준 시간 표준과 다소 차이가 있습니다. 컨텍스트 사이를 지날 때 자동으로 변환해야한다는 점은 개선 요청이므로 제출해야합니다. –
@jshier - JSValue.h 살펴보기 Apple은 자동 변환 (자바 스크립트 날짜 포함)을 위해 지원되는 내장 테이블 유형을 제공하지만 변환이 잘못되었습니다. – Mike