从外部JS文件调用iframe链接失效问题排查
解决iframe src设置无效及"Cannot set properties of null"报错问题
问题根源
- DOM加载顺序问题:你的脚本在
<iframe>标签之前加载执行,此时浏览器还没解析到id为vex6的iframe,document.getElementById("vex6")返回null,自然无法设置src属性。 - 不存在的元素触发报错:test.js中尝试设置
vex3、vex4、vex5、slope这些当前页面不存在的元素的src,每次都会抛出"Cannot set properties of null"错误,直接中断后续代码执行,连vex6的设置也被连带阻断。
修复方案
1. 调整脚本加载位置
把<script>标签移到<iframe>之后(或者<body>标签的末尾),确保DOM元素先被解析,再执行脚本:
<!DOCTYPE html> <html> <head> <title>Page Title</title> </head> <body> <iframe id="vex6" width="100%" height="500" style="border:1px solid black;"></iframe> <script type="text/javascript" src="https://styles.gq/test.js" ></script> </body> </html>
2. 给脚本添加元素存在性检查
修改test.js,先判断元素是否存在再设置src,避免报错中断代码:
// 封装一个安全设置iframe src的函数 function setIframeSrc(id, url) { const iframe = document.getElementById(id); if (iframe) { iframe.src = url; } } // 逐一设置各iframe的src setIframeSrc("vex3", "https://www.obviousplays.tk/gfiles/vex3"); setIframeSrc("vex4", "https://www.obviousplays.tk/gfiles/vex4"); setIframeSrc("vex5", "https://www.obviousplays.tk/gfiles/vex5"); setIframeSrc("vex6", "https://www.obviousplays.tk/Gfiles6/vex6"); setIframeSrc("slope", "https://www.obviousplays.tk/gfiles/slope");
这样修改后,vex6的iframe能正常加载指定链接,其他不存在的元素也不会触发报错影响代码执行。
内容的提问来源于stack exchange,提问作者ABRAMOVICH OZ
相关产品推荐
相关产品推荐

