Preventing iframe caching in browser

前端 未结 13 1411
自闭症患者
自闭症患者 2020-11-29 18:03

How do you prevent Firefox and Safari from caching iframe content?

I have a simple webpage with an iframe to a page on a different site. Both the outer page and the

相关标签:
13条回答
  • 2020-11-29 18:18

    It is a bug in Firefox 3.5.

    Have a look.. https://bugzilla.mozilla.org/show_bug.cgi?id=279048

    0 讨论(0)
  • 2020-11-29 18:22

    To get the iframe to always load fresh content, add the current Unix timestamp to the end of the GET parameters. The browser then sees it as a 'different' request and will seek new content.

    In Javascript, it might look like:

    frames['my_iframe'].location.href='load_iframe_content.php?group_ID=' + group_ID + '&timestamp=' + timestamp;
    
    0 讨论(0)
  • 2020-11-29 18:22

    I set iframe src attribute later in my app. To get rid of the cached content inside iframe at the start of the application I simply do:

    myIframe.src = "";
    

    ... somewhere in the beginning of js code (for instance in jquery $() handler)

    Thanks to http://www.freshsupercool.com/2008/07/10/firefox-caching-iframe-data/

    0 讨论(0)
  • 2020-11-29 18:25

    This is a bug in Firefox:

    https://bugzilla.mozilla.org/show_bug.cgi?id=356558

    Try this workaround:

    <iframe src="webpage2.html?var=xxx" id="theframe"></iframe>
    
    <script>
    var _theframe = document.getElementById("theframe");
    _theframe.contentWindow.location.href = _theframe.src;
    </script>
    
    0 讨论(0)
  • 2020-11-29 18:28

    After trying everything else (except using a proxy for the iframe content), I found a way to prevent iframe content caching, from the same domain:

    Use .htaccess and a rewrite rule and change the iframe src attribute.

    RewriteRule test/([0-9]+)/([a-zA-Z0-9]+).html$ /test/index.php?idEntity=$1&token=$2 [QSA]

    The way I use this is that the iframe's URL end up looking this way: example.com/test/54/e3116491e90e05700880bf8b269a8cc7.html

    Where [token] is a randomly generated value. This URL prevents iframe caching since the token is never the same, and the iframe thinks it's a totally different webpage since a single refresh loads a totally different URL :

    example.com/test/54/e3116491e90e05700880bf8b269a8cc7.html
    example.com/test/54/d2cc21be7cdcb5a1f989272706de1913.html

    both lead to the same page.

    You can access your hidden url parameters with $_SERVER["QUERY_STRING"]

    0 讨论(0)
  • 2020-11-29 18:30

    As you said, the issue here is not iframe content caching, but iframe url caching.

    As of September 2018, it seems the issue still occurs in Chrome but not in Firefox.

    I've tried many things (adding a changing GET parameter, clearing the iframe url in onbeforeunload, detecting a "reload from cache" using a cookie, setting up various response headers) and here are the only two solutions that worked from me:

    1- Easy way: create your iframe dynamically from javascript

    For example:

    const iframe = document.createElement('iframe')
    iframe.id = ...
    ...
    iframe.src = myIFrameUrl 
    document.body.appendChild(iframe)
    

    2- Convoluted way

    Server-side, as explained here, disable content caching for the content you serve for the iframe OR for the parent page (either will do).

    AND

    Set the iframe url from javascript with an additional changing search param, like this:

    const url = myIFrameUrl + '?timestamp=' + new Date().getTime()
    document.getElementById('my-iframe-id').src = url
    

    (simplified version, beware of other search params)

    0 讨论(0)
提交回复
热议问题