【发布时间】:2018-08-08 12:40:04
【问题描述】:
我很困惑为什么将我的 YouTube 跟踪代码放入 IIFE 会停止工作。
我的理解是 IIFE 可以立即运行,那么为什么包含仅包含裸 js 的脚本与包含 IFEE 的脚本之间存在差异?
这是我的普通 JS,可以正常工作:
if ( 0 < ga_options.youtube.length ) {
var tag = document.createElement( 'script' );
tag.src = '//www.youtube.com/iframe_api';
var firstScriptTag = document.getElementsByTagName( 'script' )[0];
firstScriptTag.parentNode.insertBefore( tag, firstScriptTag );
function onYouTubeIframeAPIReady() {
scroll_events.register_youtube_videos();
}
}
但是,当我将它包装在 IIFE 中时,如下所示,它不再起作用(不会触发跟踪事件)。我正在尝试使用 IIFE 作为将现有代码重组为独立单元的一部分。
请有人解释我做错了什么?我已经考虑了范围并尝试在 IIFE 之外使用 var tag 和 var firstScriptTag,但仍然没有成功。
gaEventsVideoTracking = (function(){
window.console.log( "why no youtube tracking?" );
if ( 0 < ga_options.youtube.length ) {
tag = document.createElement( 'script' );
tag.src = '//www.youtube.com/iframe_api';
firstScriptTag = document.getElementsByTagName( 'script' )[0];
firstScriptTag.parentNode.insertBefore( tag, firstScriptTag );
function onYouTubeIframeAPIReady() {
scroll_events.register_youtube_videos();
}
}
})();
【问题讨论】:
-
我有一种感觉
onYouTubeIframeAPIReady想成为你的全球。所以你也许可以这样做 ->window.onYouTubeIframeAPIReady = function () {}。 -
修正了缺少大括号的语法。还是坏了。
-
@Keith 确实如此。 It really never should have worked before, though.
-
你的意思是版本 1,在 IIFE 之外?语法错误是由于粘贴问题造成的。
-
@Keith 效果很好,谢谢。
标签: javascript iife event-tracking