2013-06-14 14 views
7

मैं एक UIWebView इस तरह मेरे विचार नियंत्रक में एम्बेडेड है से:डाटा करने के लिए और पासिंग एक एंबेडेड UIWebView

enter image description here

मैं अपने वेब दृश्य() के लिए एक दुकान है और मैं सफलतापूर्वक सामग्री लोड कर सकते हैं की उस में test.html इस का उपयोग करते हुए:

[_graphTotal loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test" ofType:@"html"]isDirectory:NO]]];

मैं अब वेब को देखने के लिए डेटा पास करने के कोशिश कर रहा हूँ और किसी भी भाग्य नहीं किया है। मेरी WebView में

<html> 
    <head></head> 
    <body> 
    Testing... 
     <script type="text/javascript"> 
     function testFunction() { 
      alert("made it!"); 
      return "hi!"; 
     } 
     </script> 
    </body> 
</html> 

मैं देख सकता हूँ "परीक्षण ...": मैं जोड़ लिया है <UIWebViewDelegate> और यहाँ मैं क्या कोशिश कर रहा हूँ है:

NSString *userName = [_graphTotal stringByEvaluatingJavaScriptFromString:@"testFunction()"]; 
NSLog(@"Web response: %@",userName); 

और यहाँ हैं test.html की सामग्री को अपने प्रोजेक्ट में , लेकिन मैं चेतावनी नहीं देख रहा हूं और न ही लौटा "हाय!" स्ट्रिंग।

कोई विचार क्या मैं गलत कर रहा हूं?

उत्तर

14

वैसे समस्या यह है कि आपने वेबव्यू को पृष्ठ लोड करने का मौका देने से पहले अपने जावास्क्रिप्ट का मूल्यांकन करने का प्रयास किया था। ,

@interface ViewController : UIViewController <UIWebViewDelegate> 

फिर अपने दृश्य नियंत्रक करने के लिए अपने वेब दृश्य के प्रतिनिधि कनेक्ट अनुरोध करना और अंत में delegate methods लागू: सबसे पहले आपके विचार नियंत्रक में <UIWebViewDelegate> प्रोटोकॉल को अपनाने। यहाँ एक है कि आपको सूचित वेबव्यू लोड हो जाए, है:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self.graphTotal loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test" ofType:@"html"]isDirectory:NO]]]; 
} 

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    NSString *userName = [self.graphTotal stringByEvaluatingJavaScriptFromString:@"testFunction()"]; 
    NSLog(@"Web response: %@",userName); 
} 

पुनश्च: सीमा जब आप जावास्क्रिप्ट का मूल्यांकन कर रहे इस तरह से है कि अपनी स्क्रिप्ट के भीतर क्रियान्वित किया जाना चाहिए के बारे में पता होना चाहिए की एक दस पल। इसलिए यदि उदाहरण के लिए आपने अलर्ट को खारिज करने के लिए 10 सेकंड से अधिक का इंतजार किया है तो आपको एक त्रुटि मिलेगी (10 सेकंड प्रतीक्षा करने के बाद वापस आने में विफल)। in the docs सीमाओं के बारे में और जानें।

+0

शानदार, यह बहुत अच्छा काम करता है। मैंने प्रतिनिधि को जोड़ा था लेकिन इंटरफ़ेस बिल्डर में इसे कनेक्ट नहीं किया था। मुझे 'webViewDidFinishLoad' विधि की भी आवश्यकता है। धन्यवाद! –

संबंधित मुद्दे