2012-12-24 2 views
5

동적 콘텐츠를로드하는 응용 프로그램에 WebView이 있는데 장치 회전시 뷰를 유지하려고합니다.동적으로 생성 된 HTML이 포함 된 웹 뷰 상태 복원하기

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    mWebView.saveState(outState); 
} 

그리고 내에서 onCreate에서() : 그래서 다음 코드 줄 썼다

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    if (savedInstanceState != null) { 
     if(D.bug){ 
      Log.i(TAG, "Restoring browser state"); 
     } 
     mWebView.restoreState(savedInstanceState); 
    } else { 
     if(D.bug){ 
      Log.i(TAG, "Not restoring browser state"); 
     } 
     mWebView.loadUrl("file:///android_asset/html/browser_3col.html"); 
    } 
    return mWebView; 
} 

을하지만이 효율적으로 페이지를 다시로드합니다. 동적으로 생성 된 HTML을 전달하고 싶습니다.

전체 문서 HTML을 JavascriptInterface을 통해 덤프하고 outstate에 저장 한 다음 JavascriptInterface을 통해 다시 설정하려고했습니다.

이 방법이 좋은 방법일까요? WebView의 메소드가있어 내부 HTML을 가져올 수 있습니까? 내 자바 스크립트 코드에서

:

+0

javascript 및 jvascript 변수를 유지할 솔루션을 찾았습니까? – Alexey

답변

0

나의 현재 솔루션은 다음과 같은 코드가에

window.JSInterface.dumpInnerHtml(document.documentElement.innerHTML); 

을 내 JavascriptInterface :

@JavascriptInterface 
public void dumpInnerHtml(String htmlDump) { 
    if (!mBrowseFragment.isDetached()) { 
     mBrowseFragment.updateWebviewHtml(htmlDump); 
    } 
} 

onSaveInstance()에서 :

super.onSaveInstanceState(outState); 
    mWebView.saveState(outState); 
    outState.putString(INSTANCE_CONTAINER_HTML, mCurrentHtmlDump); 

onCreate()에서 :

if (savedInstanceState != null) { 
     mWebView.restoreState(savedInstanceState); 
     String restoredHtml = savedInstanceState 
       .getString(INSTANCE_HTML); 
     if (restoredHtml != null) { 
      mWebView.loadData(restoredHtml, "text/html", "utf-8"); 
     } 
} 

거의 작동합니다. 그러나 나는 그것에 몇 가지 문제가있다. 그것은 loadData() 스크립트 태그를 해석하지 않는 것 같습니다. (내 js 기능이 중단됩니다.), 그리고이 느낌이 더 우아하게 해결할 수 있습니다.

+0

It 2018; 웹 뷰에 동적으로 추가 된 콘텐츠를 저장하는 것이 여전히 불가능합니까? :( – David

관련 문제