2012-02-07 2 views
0

나는 webview 있고 일부 html5 + js로드합니다. 내 webapp는 매우 데이터 집약적입니다. 상태 함수를 사용하면 올바른 자바 스크립트 변수가 재설정 되었기 때문에 오리엔테이션 변경 후 올바른 '페이지'로 돌아갈 수 있습니다. 그러나 webapp는 위험합니다.안드로이드 WebView 오리엔테이션 변경에서 JS 변수를 유지

내 모든 자바 스크립트 변수를 저장하고 웹보기 방향을 변경하면 복원 할 수있는 방법이 있습니까? 양식 텍스트 상자에 입력 된 값은 무엇입니까?

==================는

나는이에 대한 몇 가지 진전을했습니다. 내 JS에서는, 나는 requestState();라고 불리는 고리가있다.이 함수가 호출되면, JS 인터페이스를 통해 모든 JS 변수를 android/java 측으로 전송한다.

자바 측에서는 getLastNonConfigurationInstanceonRetainNonConfigurationInstance을 사용하여이 정보를 유지합니다. 나는 결과를 테스트했고 실제로 오리엔테이션 변경에서 액티비티 상태가 변경되기 전에 Java에서 모든 JS 변수를 내 객체에 저장합니다.

문제는 내가 있어야 할 곳으로 돌아갑니다. 나는 내의 반대 기능을 수행하는 함수를 setState(input);이라고한다. 이 함수는 mywebview.loadUrl("javascript:setState(" + jsonStr + ")");을 사용하여 Android 측에서 호출됩니다. 나는 webview를 수축시키고 wv.restoreState(savedInstanceState);을 호출 한 후 onCreate가 끝날 때이 작업을 수행합니다.

비록 내가 알아 차 렸지만 setState은 내가 그것을 부르는 시점에 정의되지 않았다! 사실, 내 JS 스크립트 중 아무 것도 호출 할 준비가되지 않았거나 존재하지도/내 activity의 onCreate 함수의 끝에 발견되지도 않습니다. 내 정신을 시험하기 위해 나는 mywebview.loadUrl("javascript:alert(" + jsonStr + ")");을 시도했고 실제로 내가 기대했던 것을 보았습니다. 즉 모든 변수 값이 포함 된 경고였습니다. 그러나 경고가 오기 전에 페이지 자체가 렌더링되지 않은 것으로 나타났습니다. 이 문제를 해결하려면 어떻게해야합니까?

답변

0

시간을 낭비하지 마십시오. 많은 위험을 감수 한 후 위의 문제에 대한 해결책이 없기 때문에 대부분의 사람들이 반드시 사용해야하는 html5 로컬 저장소를 사용하기로 결정했습니다.

0

내가 생각할 수있는 유일한 대답은 loadDataWithBaseURL을 사용하여 WebView를 다시로드하고 필요한 모든 변수를 다시 초기화하는 사용자 정의 body.onload 핸들러를 삽입하여 페이지 내용의 전처리 된 버전을 전달하는 것입니다. 는 < BODY 시퀀스를 참조하면,이다

가 필요한 설정을하는 기능의 정의를 포함하는 <SCRIPT> ... </SCRIPT > 부분 앞에 추가하고 < BODY로의 onload 속성 주입 ... >이 함수를 호출하는 태그.

물론 < BODY ONLOAD ... >이있는 경우 물론 약간 더 복잡해집니다. 그러나 약간만 ...

관련 문제