我试图在 IE8 上触发一个自定义事件,并从这里和这里一起摆弄一个解决方案。但我无法让它工作......
我正在将 jquery mobile 与 requireJS 和谷歌分析一起使用。所以我正在跟踪 JQMpageshow
事件。但是,由于 requireJS 异步加载脚本,我对 pageshow 的绑定需要在 javascript“包装器”中进行,否则会产生错误,因为在解析代码段时,jquery 和 jquery mobile 都不会被加载。
所以我在每一页的末尾都包含了这个:
if (document.addEventListener) {
document.addEventListener("jqmReady",function(){trigAnalytics("jqmReady");alert("FF detected")},false);
} else if ( document.attachEvent ) {
document.attachEvent("jqmReady", function(){trigAnalytics("jqmReady");alert("IE detected")});
}
当检测到时,我正在使用 pageshow 绑定触发我的分析片段:
var trigAnalytics = function( trigger ){
$(document).on('pageshow','div:jqmData(role="page").basePage', function (event, ui) {
var url = location.href;
try {
hash = location.hash;
if (hash && hash.length > 1) {
_gaq.push(['_trackPageview', hash.substr(1)]);
_gaq.push(['_setCustomVar', 1, 'id_external', ########, 1 ]);
} else {
_gaq.push(['_trackPageview', url]);
_gaq.push(['_setCustomVar', 1, 'id_external', ########, , 1 ]);
_gaq.push(['b._trackPageview', url]);
}
} catch(err) { }
});
if (typeof _gaq !== "undefined" && _gaq !== null) {
$(document).ajaxSend(function(event, xhr, settings){
_gaq.push(['_trackPageview', settings.url]);
_gaq.push(['b._trackPageview', settings.url]);
});
}
};
所以要启动事件链,我需要jqmReady
在 JQM 准备好时触发。JQM 使用他们的mobileinit
事件来表明这一点。所以在我的应用程序控制器初始化中,我像这样绑定到它:
$(document).bind("mobileinit", function () {
// non-IE OK
if (document.createEvent) {
evt = document.createEvent("Event");
evt.initEvent("jqmReady", true, true);
document.dispatchEvent(evt);
} else if (document.createEventObject) {
// MSIE (NOT WORKING)
document.documentElement.evt = 0; // an expando property
document.documentElement.attachEvent("jqmReady", function () {
document.documentElement.evt = document.documentElement.evt + 1;
});
}
});
我试过只触发 $(window).trigger('jqmReady'),因为当mobileinit
触发时,jquery 可用。但是,似乎addEventListener
无法像这样触发中创建的事件,所以我需要一个纯 JavaScript 的解决方案来触发 IE 中的自定义事件。
问题:
有人可以告诉我如何正确触发 IE8 的 javascript 自定义事件吗?