PHP脚本出现Uncaught TypeError: Cannot read property 'parentNode' of undefined错误
解决Uncaught TypeError: Cannot read property 'parentNode' of undefined错误
这个错误的核心原因是你的JavaScript代码里存在语法错误,导致fjs变量变成了undefined,自然无法读取它的parentNode属性。我来帮你一步步修正:
问题代码里的错误点
d.getElementsByTagName[0]:getElementsByTagName是DOM方法,必须用括号调用,而且要传入目标标签名(这里是script),否则无法获取正确的元素集合。原代码没加括号也没传参数,导致fjs为undefined。js = d.createElement;:同样,createElement也是方法,需要传入要创建的标签名(script)才能生成正确的元素节点。
修正后的完整代码
(function(d, s, id) { var js, fjs = d.getElementsByTagName('script')[0]; if (d.getElementById(id)) return; js = d.createElement('script'); js.id = id; js.src = "https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.6"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));
额外的兼容性处理(可选)
如果你的页面可能不存在任何script标签(这种情况很少见,但可以提前预防),可以添加 fallback 逻辑,确保有合法的父节点来插入脚本:
(function(d, s, id) { var js, fjs = d.getElementsByTagName('script')[0]; if (d.getElementById(id)) return; js = d.createElement('script'); js.id = id; js.src = "https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.6"; // 如果没有找到script标签,就插入到head或者body里 var insertTarget = fjs ? fjs.parentNode : d.head || d.body; insertTarget.insertBefore(js, fjs || null); }(document, 'script', 'facebook-jssdk'));
这样修改后,代码就能正确获取到父节点并插入Facebook SDK脚本,不会再出现那个类型错误了。
内容的提问来源于stack exchange,提问作者Athira Devi
相关产品推荐
相关产品推荐

