2013-02-27 223 views
6

मैंने कई धागे खोजे हैं और अभी भी मेरे प्रश्न का उत्तर नहीं मिल रहा है। मैं Android ऐप पर काम कर रहा हूं जो WebView का उपयोग करता है। मेरी onCreate() मेंक्या वेबव्यू सेवस्टेट() जावास्क्रिप्ट चर/पर्यावरण को संरक्षित करता है?

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    webView.saveState(savedInstanceState); 
} 

और

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    webView.restoreState(savedInstanceState); 
} 

मैं भी इस राशि:

मैं WebView राज्य इस तरह बचाने के लिए onSaveInstanceState() और onRestoreInstanceState() का उपयोग

public void onCreate(Bundle savedInstanceState) { 
    ... other code ... 
    if(savedInstanceState != null){ 
     webView.saveState(savedInstanceState); 
    }else{ 
     webView.loadUrl("http://mypage"); 
    } 
} 

समस्या : ऐसा लगता है कि WebView को पुनर्स्थापित करना Javascript चर/पर्यावरण/कार्यक्षेत्र को पुनर्स्थापित नहीं करता है। जब पृष्ठभूमि में ऐप मारा जाता है और फिर बहाल किया जाता है, तो संपूर्ण जावास्क्रिप्ट सभी ऑब्जेक्ट्स/चर के साथ चला जाता है। जावास्क्रिप्ट कोड नाम-दूरी है, यानी window.utilitiesPack, window.eventHandlers, window.automation, आदि और वे अपरिभाषित हैं। JQuery और अन्य जावास्क्रिप्ट प्लगइन्स का उपयोग किया जाता है: उन सभी को पुनर्स्थापित करने के बाद अपरिभाषित प्रतीत होता है। असल में पूरी जावास्क्रिप्ट बहाल नहीं किया जाता है।

क्या कोई पुष्टि या अस्वीकार कर सकता है कि यह वास्तव में है (जावास्क्रिप्ट सहेजा नहीं गया है)? यदि संपूर्ण जावास्क्रिप्ट वर्कस्पेस सहेजा नहीं गया है, तो WebView.saveState() वास्तव में क्या करता है? क्या जावास्क्रिप्ट ऑब्जेक्ट्स को संरक्षित करने के लिए मौजूदा एपीआई का उपयोग करने के लिए कुछ आसान/सुरुचिपूर्ण तरीका है?

// ============================================ ==========

अद्यतन 1: तो समस्या बनी हुई है। सबसे महत्वपूर्ण कठिनाई यह है:

परिणामस्वरूप मैं कैमरा Intent लॉन्च कर रहा हूं। जब तस्वीर ली जाती है, तो ऐप WebView गतिविधि पर वापस आ जाता है और कुछ डेटा चर के साथ HTML5 LocalStorage अपडेट करने के लिए जावास्क्रिप्ट का उपयोग करना चाहिए।

WebView के साथ मुख्य गतिविधि कैमरा गतिविधि प्रदर्शित होने पर मारे गए, इसलिए जब हम वेबव्यू पर वापस आते हैं, तो अब जावास्क्रिप्ट नहीं है और कोई भी फ़ंक्शन मैं एंड्रॉइड कोड से कॉल नहीं कर सकता। यह हर बार Galaxy S3 पर होता है। यह अभी भी अन्य फोन पर होता है, लेकिन तस्वीर लेने पर हर बार नहीं।

पता नहीं क्या यहां करना है। कैमरे के इरादे से तस्वीर ले जा रही है, जबकि किसी भी तरह से मुझे राज्य को बनाए रखने के लिए वेबव्यू के साथ मुख्य गतिविधि करना होगा। क्या किसी को पता है कि यह कैसे प्राप्त किया जा सकता है?

+1

"क्या कोई पुष्टि कर सकता है या अस्वीकार कर सकता है कि यह वास्तव में है" - क्या आपने इसे आजमाकर इसकी पुष्टि करके पुष्टि नहीं की और यह वास्तव में क्या हुआ? – millimoose

+0

(प्रलेखन का अर्थ यह है कि जो बचाया गया है वह 'वेबबैकफोर्डलिस्ट' है।) – millimoose

+1

"क्या आपने इसे अभी कोशिश करके इसकी पुष्टि नहीं की और यह वास्तव में क्या होता है?" मैं बस विश्वास नहीं कर सकता कि पूरी जावास्क्रिप्ट सहेजा नहीं गया है। मुझे आशा है कि मैं कुछ समझ नहीं रहा हूं क्योंकि यदि ऐसा है, तो यह उन ऐप्स के लिए ऐसी सीमा है जो जटिल जावास्क्रिप्ट फ़ंक्शन के साथ वेबपृष्ठों का उपयोग करते हैं। – user2113581

उत्तर

3

बहुत कम जानकारी मिल गई है, केवल इस पंक्ति:

कृपया ध्यान दें कि इस विधि द्वारा अब इस WebView के लिए प्रदर्शन डेटा संग्रहीत करता है। यदि पुनर्स्थापना (बंडल) कभी नहीं बुलाया गया था तो पिछले व्यवहार संभावित रूप से फ़ाइलों को रिसाव कर सकता था।

और इस लाइन:

वापस/आगे राज्य को बचाने के लिए इस्तेमाल किया सूची का एक ही कॉपी देता है।

WebView.saveState(Bundle) के लिए जावाडोक में।

+1

आपके उत्तर के लिए धन्यवाद। यह थोड़ी देर हो गया है क्योंकि मैं इस समस्या में भाग गया हूं और इसलिए मैं यहां अपने प्रश्न के बारे में भूल गया। मैं आपके जवाब को सही के रूप में चिह्नित कर रहा हूं क्योंकि यह है। उन लोगों के लिए जो एक ही समस्या में चलते हैं: जिस तरह से मैंने इसे हल किया है, गतिविधि के संदर्भ में ऐप के संदर्भ में वेब व्यू को परिभाषित करना है। अब सबकुछ अपेक्षित काम करता है। इस दृष्टिकोण के साथ एकमात्र समस्या यह है कि आपको सतर्क()/पुष्टि() काम करने के लिए jsAlert() और onJsConfirm() पर ओवरराइड करना होगा।