You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在iFrame指定的本地HTML文件不存在时,将其src替换为默认的Empty.html

如何在iFrame指定的本地HTML文件不存在时,将其src替换为默认的Empty.html

因为你是直接在本地打开文件(没有使用Web服务器),常规的AJAX预检测文件存在性的方法会被浏览器安全策略阻止(本地文件的跨源请求限制)。不过我们可以利用iframe的onerror事件来捕获加载失败的情况,自动切换到Empty.html

下面是修改后的完整代码,你可以直接替换Default.html里的<script>部分:

<script>
function getcontent(year) {
  var iframe = document.getElementById('content');
  
  // 先清空之前的事件监听,避免重复触发
  iframe.onerror = null;
  iframe.onload = null;

  // 定义加载失败的处理函数
  function handleLoadError() {
    // 切换到Empty.html
    iframe.src = 'Empty.html';
    // 清理事件监听,防止后续干扰
    iframe.onerror = null;
    iframe.onload = null;
  }

  // 定义加载成功的处理函数
  function handleLoadSuccess() {
    // 加载成功后,清理事件监听
    iframe.onerror = null;
    iframe.onload = null;
  }

  // 绑定事件
  iframe.onerror = handleLoadError;
  iframe.onload = handleLoadSuccess;

  // 尝试加载目标年份的HTML文件
  iframe.src = year + ".html";
}
</script>

工作原理:

  1. 当你在输入框中选择或输入年份时,getcontent函数会先给iframe绑定两个事件:
    • onerror:如果目标HTML文件在本地不存在,浏览器会触发这个事件,我们就把iframe的src切换到Empty.html
    • onload:如果目标文件存在且加载成功,这个事件会触发,我们就清理掉事件监听,避免后续操作产生冲突。
  2. 最后设置iframe的src为目标年份的HTML文件,开始尝试加载。

注意事项:

  • 确保Empty.htmlDefault.html在同一个文件夹下,如果不在同一目录,要写正确的相对路径(比如./subfolder/Empty.html)。
  • 这个方案在Edge浏览器的本地文件模式下完全有效,Edge会在本地文件加载失败时正常触发iframe的onerror事件。
  • 每次调用getcontent时都会先清空之前的事件监听,防止多次触发同一个事件处理函数导致的异常。

你可以直接替换原来的脚本部分测试:输入存在的年份(比如2025),iframe会正常显示对应文件;输入不存在的年份(比如2000),就会自动显示Empty.html的内容了。

内容来源于stack exchange

火山引擎 最新活动