나는 webview 있고 일부 html5 + js로드합니다. 내 webapp는 매우 데이터 집약적입니다. 상태 함수를 사용하면 올바른 자바 스크립트 변수가 재설정 되었기 때문에 오리엔테이션 변경 후 올바른 '페이지'로 돌아갈 수 있습니다. 그러나 webapp는 위험합니다.안드로이드 WebView 오리엔테이션 변경에서 JS 변수를 유지
내 모든 자바 스크립트 변수를 저장하고 웹보기 방향을 변경하면 복원 할 수있는 방법이 있습니까? 양식 텍스트 상자에 입력 된 값은 무엇입니까?
==================는
나는이에 대한 몇 가지 진전을했습니다. 내 JS에서는, 나는 requestState();
라고 불리는 고리가있다.이 함수가 호출되면, JS 인터페이스를 통해 모든 JS 변수를 android/java 측으로 전송한다.
자바 측에서는 getLastNonConfigurationInstance
과 onRetainNonConfigurationInstance
을 사용하여이 정보를 유지합니다. 나는 결과를 테스트했고 실제로 오리엔테이션 변경에서 액티비티 상태가 변경되기 전에 Java에서 모든 JS 변수를 내 객체에 저장합니다.
문제는 내가 있어야 할 곳으로 돌아갑니다. 나는 내의 반대 기능을 수행하는 함수를 setState(input);
이라고한다. 이 함수는 mywebview.loadUrl("javascript:setState(" + jsonStr + ")");
을 사용하여 Android 측에서 호출됩니다. 나는 webview를 수축시키고 wv.restoreState(savedInstanceState);
을 호출 한 후 onCreate가 끝날 때이 작업을 수행합니다.
비록 내가 알아 차 렸지만 setState
은 내가 그것을 부르는 시점에 정의되지 않았다! 사실, 내 JS 스크립트 중 아무 것도 호출 할 준비가되지 않았거나 존재하지도/내 activity의 onCreate 함수의 끝에 발견되지도 않습니다. 내 정신을 시험하기 위해 나는 mywebview.loadUrl("javascript:alert(" + jsonStr + ")");
을 시도했고 실제로 내가 기대했던 것을 보았습니다. 즉 모든 변수 값이 포함 된 경고였습니다. 그러나 경고가 오기 전에 페이지 자체가 렌더링되지 않은 것으로 나타났습니다. 이 문제를 해결하려면 어떻게해야합니까?