使用iframe-resizer时遭遇未捕获TypeError错误求助
嘿,这个错误其实一眼就能看穿——报错里的Uncaught TypeError: $ is not a function直接点明了核心问题:你在resizedCallback回调函数里使用了jQuery的$符号,但当前页面环境里jQuery要么没正确加载,要么$的命名被其他库冲突覆盖了。
下面给你几个具体的排查和解决方向:
先确认jQuery是否已正确引入
打开浏览器F12的「网络」面板,刷新页面后搜索jquery,查看是否有成功加载的jQuery资源。如果搜不到,说明你还没在页面中引入jQuery文件,需要先添加引用,且要保证jQuery的加载顺序在所有用到$的代码之前。检查jQuery的加载顺序
就算你引入了jQuery,要是它加载在iframeResizer初始化代码或者resizedCallback函数之后,当回调执行时$还未被定义,同样会触发这个错误。所以要把jQuery的<script>标签放在所有依赖$的代码前面。解决
$的命名冲突问题
如果页面同时使用了其他会占用$符号的库(比如Prototype),jQuery的$会被覆盖。这种情况有两种解决办法:
一是直接用jQuery全称代替$,比如把$('#target-element')改成jQuery('#target-element');
二是使用jQuery的noConflict模式释放$的控制权:var jq = jQuery.noConflict(); // 之后在回调里用jq代替$ function resizedCallback(data) { jq('#your-element').doSomething(); }检查你的
resizedCallback代码
直接查看报错指向的(index):888行代码,确认里面的$调用有没有拼写错误,或者是否在未引入jQuery的作用域中使用了$。
另外提一句:iframe-resizer本身并不依赖jQuery,所以这个错误和你使用的iframe-resizer版本无关(你下载最新版的操作没问题),完全是自定义回调里的jQuery使用问题。
内容的提问来源于stack exchange,提问作者ESlaydon

