2013-04-01 34 views
1

我有設置下面這段代碼我的UIWebView:的iOS stringByEvaluatingJavaScriptFromString問題

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 

    [webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById(\"image\").src=\"q%@.png\";", self.imageIndex]]; 

    NSLog(@"%f", [[webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"image\").height;"] floatValue]); 

    CGFloat width = [[webView stringByEvaluatingJavaScriptFromString:@"document.width"] floatValue]; 
    CGFloat height = [[webView stringByEvaluatingJavaScriptFromString:@"document.height"] floatValue]; 


    CGSize contentSize = CGSizeMake(width, height); 

    [self setUpNewSize:contentSize]; 
} 

我設置新的形象與標識對象(和它的作品)。但尺寸不變。正如你所看到的,我使用NSLog打印高度值,但高度顯示爲0.0000。

這是我的HTML文件:

<!DOCTYPE html> 
<html> 
    <head> 

     <title>Question 1</title> 


    </head> 

    <body> 

     <h3 id="header">Question 1</h3> 

     <img id="image" src="" alt="" width="100%"> 

    </body> 

</html> 

,我爲每個圖像不同的高度,它是動態變化的。所以我的問題是爲什麼當我調用stringByEvaluatingJavaScriptFromString時,document和img的高度不會改變。也許我需要創建一些重載方法?

回答

1

您正在設置src屬性後立即訪問高度和寬度。您應該先等待圖像加載。

您可以通過在以下委託調用中檢查請求url來檢測圖像是否正在加載。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

一旦你知道的圖像開始加載,那麼你就可以得到它的高度和寬度在隨後調用

- (void)webViewDidFinishLoad:(UIWebView *)webView 
+0

感謝響應,但不知道,我明白你的權利。我已經添加了你的方法,並且惰性了我的圖像代碼。但加載後我沒有看到任何變化。我先設置了斷點,然後調用了shouldStartLoadWithRequest然後是webViewDidFinishLoad,但內容沒有按照我的想法加載,這意味着我無法使用DOM對象,因爲它們尚不可用。 –