【问题标题】:Automatically reload an iframe if source page changes如果源页面发生更改,则自动重新加载 iframe
【发布时间】:2012-10-12 20:54:01
【问题描述】:

我不知道我的代码有什么问题,即使我更改了目标文件的内容,它仍然不会刷新 iframe。

<script type="text/javascript">
var page = 'data/apps/<? echo $_SESSION['name']; ?><? echo $_SESSION['last']; ?>App.html', lM;

function checkModified(){
   $.get(page, function(a,a,x){
      var mod = x.getResponseHeader('last-modified');
      if(lM != mod){
         lM = mod;
         document.getElementById("frame").src += "";
      }
   }
}

setInterval(checkModified, 5000); // every 5 seconds
</script>

我想要实现的是当目标页面发生更改时,iframe 会自动重新加载,以便将更改显示给用户。两个页面都位于同一个域中。

【问题讨论】:

  • 目标页面是什么意思?包含 iframe 的页面还是 iframe 中的页面?
  • 啊,我明白了 - 你的意思是 iframe 中的页面。

标签: javascript iframe automation reload detect


【解决方案1】:

首先,$.get 方法末尾缺少右括号“)”。

不过,主要问题可能是您的服务器没有发送正确的Last-Modified 标头。我测试的服务器没有发送任何内容,这意味着 mod 未定义。一种解决方法是改为检查 Content-Length。这并不理想,因为编辑后的页面不一定会改变大小,但您似乎可以控制页面,因此您可以确保添加额外的字节来强制刷新。

这是您更新的 checkModified 函数,它应该可以工作:

function checkModified() {
   $.get(page, function(a, b, x) {
      var mod = (x.getResponseHeader('Last-Modified')) ? x.getResponseHeader('Last-Modified') : x.getResponseHeader('Content-Length');
      if (lM != mod) {
         lM = mod;
         console.log('Fetched');
         document.getElementById("frame").src += "";
      }
   });
}

【讨论】:

  • 只是想先检查简单的事情:您正在编辑几个字节(不仅仅是更改单个字符)并且您将其托管在服务器上而不是 file://localhost?跨度>
  • 只有这个“x.getResponseHeader('Content-Length');”时工作
  • 现在的问题是缓存,因为当页面缓存设置时,它有时会弄乱获取文件的确切大小。
猜你喜欢
  • 1970-01-01
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 2016-04-26
  • 1970-01-01
相关资源
最近更新 更多