2012-12-24 20 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 को पास करना चाहता हूं।

मैं JavascriptInterface के माध्यम से पूरे दस्तावेज़ HTML को डंप करने के बारे में सोच रहा था, इसे आउटस्टेट में संग्रहीत कर रहा था, और फिर इसे JavascriptInterface के माध्यम से फिर से रीसेट कर रहा था।

क्या यह एक अच्छा दृष्टिकोण होगा? क्या WebView का कोई तरीका नहीं है जो मुझे अपना आंतरिक HTML प्राप्त करने की अनुमति देता है?

मेरी जावा स्क्रिप्ट कोड में

:

+0

क्या आपने कभी ऐसा समाधान पाया है जो जावास्क्रिप्ट और jvascript चर बनाए रखेगा? – Alexey

उत्तर

0

मेरे वर्तमान समाधान निम्नलिखित कोड है में

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

मेरी JavascriptInterface:

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

:

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() स्क्रिप्ट टैग की व्याख्या नहीं करता है। (मेरे जेएस फंक्शन तोड़ते हैं।), और मुझे लगता है कि इसे और अधिक सुन्दर तरीके से हल किया जा सकता है।

+0

यह 2018; वेबव्यू में गतिशील रूप से जोड़ा गया सामग्री सहेज रहा है अभी भी असंभव है? :( – David