应用程序文档文件夹中的UIWebView图像没有刷新

8

我有一个UIWebView,通过它显示动态生成的HTML。

[_webView loadHTMLString:htmlString baseURL:applicationDocumentsDirectory];

HTML中包含图片,如<img src="chart1.png">。每次生成HTML时,图片也会重新生成。(我已经检查过它们确实在正确的位置并进行了更新。)然而,在第一次运行后,如果我更改数据并重新启动我的UIWebView,它会使用旧图片。

我已经尝试过:

[[NSURLCache sharedURLCache] removeAllCachedResponses];

毫无效果。(也许这与NSURLRequests有关。)

我知道绝对URLs是可能的,但我没有尝试过,因为它似乎很繁琐,而且我希望它能够使用这些简单的相对URLs。问题不在于找到图像,而在于适当地更新它们。

我也知道你可以发明一些方案来欺骗浏览器,使其认为图像是动态的,方法是将src更改为类似于chart1.png?1234的东西,其中数字是随机生成的并且始终唯一。但这似乎是一个无用的解决方法,对于应该简单解决的问题来说,这是无意义的。

有什么想法吗?


我曾经遇到过同样的问题,UIWebView会缓存图片。我通过在每次重新加载时更改图像名称(添加时间戳)来解决了这个问题。你也可以试试,说不定能解决问题。 - Nilesh
3个回答

0

嗨,我在使用UIWebView时遇到了类似的问题,每当我加载之前已经加载过的页面时,都会显示旧内容。经过进一步调查,我发现UIWebView的内容是在后台加载的,然后在完成加载后显示;但是,在它加载时会显示旧内容。我通过创建自己的UIWebView加载代理并添加自己的加载符号来解决了我的问题,而不是显示旧内容。

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

webView.hidden = true;
loader.animationImages =[NSArray arrayWithObjects:

                            [UIImage imageNamed:@"1.png"],
                            [UIImage imageNamed:@"2.png"],
                            [UIImage imageNamed:@"3.png"],
                            [UIImage imageNamed:@"4.png"],
                            [UIImage imageNamed:@"3.png"],
                            [UIImage imageNamed:@"2.png"],
                            [UIImage imageNamed:@"1.png"],
                            [UIImage imageNamed:@"5.png"]
                             ,nil];


loader.animationDuration = 1.5;

loader.animationRepeatCount = 100;
[loader startAnimating];

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

[loader stopAnimating];
webView.hidden  = false;
}

记得链接委托和其他相关内容,希望这能帮到你 :)


抱歉,这也不适用。加载的HTML字符串具有不同的文本,将显示不同的文本。只有图像不会更改。图像是在文本生成之前生成的。 - Mundi

0

你应该正确引用图片,否则它可能无法正常工作。如果你的图片和HTML文件在同一级别,则尝试使用类似以下代码:

<img src="./chart1.png">

或者,如果您想要文件夹中的图像,则可以使用正确的路径引用来引用它。

希望它能正常工作。


不错的尝试。这并没有任何区别。 - Mundi

-1

您需要提供图像源的绝对路径。

NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                     NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString* path = [documentsDirectory stringByAppendingPathComponent:
                  @"/chart1.png" ];

希望这个能够正常工作


问题中明确指出我需要相对路径。呃。 - Mundi
你可以使用<img src="../chart1.png">。".."代表图表1图片所在的上级文件夹。 - Nupur Gupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接