2012-12-24 6 views
5

Tôi có WebView trong ứng dụng tải nội dung động và tôi muốn chế độ xem tồn tại trên xoay thiết bị. Vì vậy, tôi viết những dòng mã sau đây:Khôi phục trạng thái xem web có chứa HTML được tạo động

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

Và trong onCreate của tôi():

@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; 
} 

Nhưng điều này một cách hiệu quả tải lại trang. Tôi muốn chuyển HTML được tạo động.

Tôi đã nghĩ đến việc bán toàn bộ tài liệu HTML thông qua một JavascriptInterface, lưu trữ nó trong outState, và sau đó đặt lại nó thông qua JavascriptInterface.

Đây có phải là cách tiếp cận tốt không? Không có phương pháp nào của WebView cho phép tôi lấy HTML bên trong của nó?

+0

Bạn đã bao giờ tìm thấy giải pháp giữ lại biến javascript và jvascript chưa? – Alexey

Trả lời

0

giải pháp hiện tại của tôi có đoạn mã sau:

trong mã JavaScript tôi:

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

trong tôi JavascriptInterface:

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

trong onSaveInstance():

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

trong onCreate():

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

Nó hầu như hoạt động. Nhưng tôi có một số vấn đề với nó. Dường như loadData() không giải thích các thẻ script. (Chức năng js của tôi bị vỡ.), Và tôi cảm thấy như thế này có thể được giải quyết một cách tao nhã hơn.

+0

Nó 2018; đang lưu nội dung được thêm động trong webviews vẫn không thể? :( – David