私はIE8でカスタムイベントを発生させようとしていて、こことここから一緒に解決策をいじっています。しかし、私はそれを機能させることができません...
私はrequireJSとGoogleアナリティクスでjquery mobileを使用しています。だから私は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
イベントを使用して、まさにそれを示します。したがって、アプリケーション コントローラーの init 内で、次のようにバインドしています。
$(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
このようにトリガーできないようです。そのため、IE でカスタム イベントをトリガーするには JavaScript のみのソリューションが必要です。
質問:
IE8 の JavaScript カスタム イベントを正しくトリガーする方法を教えてもらえますか?