如何在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>
工作原理:
- 当你在输入框中选择或输入年份时,
getcontent函数会先给iframe绑定两个事件:onerror:如果目标HTML文件在本地不存在,浏览器会触发这个事件,我们就把iframe的src切换到Empty.html。onload:如果目标文件存在且加载成功,这个事件会触发,我们就清理掉事件监听,避免后续操作产生冲突。
- 最后设置iframe的src为目标年份的HTML文件,开始尝试加载。
注意事项:
- 确保
Empty.html和Default.html在同一个文件夹下,如果不在同一目录,要写正确的相对路径(比如./subfolder/Empty.html)。 - 这个方案在Edge浏览器的本地文件模式下完全有效,Edge会在本地文件加载失败时正常触发iframe的
onerror事件。 - 每次调用
getcontent时都会先清空之前的事件监听,防止多次触发同一个事件处理函数导致的异常。
你可以直接替换原来的脚本部分测试:输入存在的年份(比如2025),iframe会正常显示对应文件;输入不存在的年份(比如2000),就会自动显示Empty.html的内容了。
内容来源于stack exchange




