2012-01-20 14 views
10

में जावास्क्रिप्ट निष्पादन रोकें मैंने एस पक्ष को UIScrollView में कई तरफ रखा है। प्रत्येक UIWebView में एक "वेब ब्राउज़र" दृश्य शामिल है जो एक स्थानीय HTML फ़ाइल प्रदर्शित करता है। दुर्भाग्य से मुझे नहीं पता कि पृष्ठभूमि में वेबव्यू को कैसे लोड किया जाए और साथ ही जावास्क्रिप्ट फ़ंक्शंस को HTML फ़ाइलों में निष्पादित करने से रोकने या रोकने के लिए भी। मेरा मतलब है "पृष्ठभूमि में" क्योंकि मैं पहले कुछ पैनल देखता हूं और इसी दौरान शेष पैनल चुपचाप आलसी लोड करते हैं। मैंने विभिन्न अनुप्रयोगों (जैसे पगपिग) को देखा - यह आलसी HTML पृष्ठों को लोड करता है और जावास्क्रिप्ट एनिमेशन को रोकता है - यह किसी भी तरह से जावास्क्रिप्ट को पूरे फीड प्रभाव को एनिमेट करने के लिए रोक सकता है जिसे मैं अक्सर अपने एचटीएमएल पृष्ठों में टैब स्विच के बीच उपयोग करता हूं और फिलहाल मैं पैनल लोड करता हूं यह फीका एनीमेशन जारी है।UIWebView

तो, सवाल यह है:

कैसे मैं एक जावास्क्रिप्ट एनीमेशन रोक सकते हैं और ऑब्जेक्टिव-सी कोड का उपयोग कर स्मृति समस्याओं को रोकने के लिए और कैसे मैं फीका एनीमेशन एक बार जारी रख सकते हैं मैं पैनल प्रदर्शित कर सकते हैं?

उत्तर

4

आप जावास्क्रिप्ट इंजेक्शन लगाने की कोशिश की है (अर्थात - (NSString*) stringByEvaluatingJavaScriptFromString: (NSString *)script) कि onblur और window की onfocus, या pageshow और pagehide का मानना ​​है? This post इसके लिए कुछ समाधान प्रस्तावित करता है।

तो, आप की तरह

$(window).blur(function(){ 
    // when the web view loses focus 
}); 
$(window).focus(function(){ 
    // when the web view gains focus 
}); 

कुछ की कोशिश कर सकते अगर यह काम नहीं है, तो आप pagehide और pageshow घटनाओं की कोशिश कर सकते: हो सकता है आप (stringByEvaluatingJavaScriptFromString का प्रयोग करके) एक जानबूझकर-दोषपूर्ण के मूल्यांकन की कोशिश कर सकते हैं

function pageShown(evt) 
{ 
    if (evt.persisted) 
     // The page was just restored from the Page Cache 
    else 
     // The initial load. This is the same as the page load event 
} 

function pageHidden(evt) 
{ 
    if (evt.persisted) 
     // The page was suspended and placed into the Page Cache 
    else 
     // This is the same as the page unload event 
} 

window.addEventListener("pageshow", pageShown, false); 
window.addEventListener("pagehide", pageHidden, false); 
0

जावास्क्रिप्ट कोड खंड और जेएस-दुभाषिया को चकित करने का कारण बनता है?

<script> var j =  // note: missing value, error! 
</script> 
1

मुझे लगता है कि आप HTML में चल रहे एनीमेशन जावास्क्रिप्ट को नियंत्रित कर सकते हैं (आपने कहा कि पृष्ठ स्थानीय है)। मैं जेएस फ़ंक्शन में एनीमेशन को लपेटने के लिए क्या करूंगा जो कोको से बुलाया जाएगा (इसके लिए स्टैक ओवर फ्लो जैसे - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script पर कई संदर्भ हैं)।

फिर मैं एक स्टैक तैयार करूंगा जिसमें HTML पृष्ठों में से प्रत्येक के लिए रिकॉर्ड हो, जो आप आलसी लोड करना चाहते हैं। प्रत्येक UIScrollView scrollViewDidScroll: पर मैं जांचता हूं कि पूरे वेबव्यू आकार के आकार में एक स्क्रॉल किया गया है, इसलिए यदि मैं उस रिकॉर्ड को स्टैक से पॉप करता हूं और जावास्क्रिप्ट स्टार्ट एनीमेशन फ़ंक्शन को कॉल करता हूं जिसे हमने अगले वेबव्यू पर पहले बताया था।

यदि आपको डबल-पक्षीय संचार (जावास्क्रिप्ट से कोको तक) की आवश्यकता है उदाहरण के लिए कि एनीमेशन पूरा हो गया है तो आप JSBridge का उपयोग कर सकते हैं। (How do I call an Objective-C method from JavaScript on UIWebView?)