iOS PhoneGap。防止缓存中的iFrame

时间:2012-10-08 09:56:58

标签: javascript ios ipad html5 cordova

在iPad的PhoneGap应用程序中,我有一个iFrame,显示存储在在线数据库中的数据。在下一步中,我通过JSON下载此数据并在应用程序中进行编辑。当我完成后,我将返回iFrame,但它仍会显示旧数据。使用JSON,我可以获得新的正确数据。

...简而言之,该应用程序会缓存iFrame的内容

我尝试了一切来防止缓存,包括页面中常用的元标记内容

<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />

并使用时间戳作为get-parameter调用该页面。我甚至尝试通过JavaScript重新渲染整个iFrame,但它仍然不起作用。

function loadFrame() {
var cid = localStorage.getItem("cid");  
var ts = new Date().getTime();
var url = pageURL+"?c=" +cid + "&timestamp=" + ts;

localStorage.removeItem("cid");

ifid = "iframe_" + ts;  

$("#iframe_wrap").html('<iframe name="iframe" id="'+ifid+'" src="'+url+'" class="fullscreen"></iframe>');
$("#"+ifid).hide();
$("#"+ifid).one("load",onLoad);

console.log("URL in iFrame '#"+ifid+"': "+url);
}

只有当我重新启动应用程序时,才能获得新页面

有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

我解决了这个问题,但这只是部分iOS的错!

我忘了提到的是iFrame中的页面还显示来自AJAX请求的数据。在iOS 6中,即使你说“cache:false”(我们使用jQuery),AJAX请求也会被缓存。

因此,要获取最新数据,您必须添加一个随机但每次唯一的值作为参数(我使用时间戳)。我建议我的同事(他做了数据显示页面)添加这个参数,现在它可以工作。

当我直接在应用程序中加载数据时,我已经完成了这个技巧,但他没有:)