LiftIgniterの組み込み方によっては、Webページの読み込みの順番において問題が発生する場合があります。考えられる問題と、解決のための方法について下記に説明します。
1. LiftIgniter SDKの関数がLiftIgniterのスニペットを読み込む前にコールされる
LiftIgniter SDKの関数([$p]で始まる関数)は、LiftIgniterのスニペットを読み込んでから実行してください。
スニペットから読み込むJavascriptが完全にダウンロードされるまで、SDKの関数のコールを待つ必要はありません。スニペット側で、Javascriptファイルが準備されるまで、すべての[$p]コールを順番待ちにする仕組みを持っています。
しかしながら、スニペット自体が先に実行される必要があります。スニペットが実行されていない場合は、ブラウザ側で[$p]が参照する先を判別できなくなります。
Google Tag Managerをスニペットに使用して、SDK関数をGoogle Tag Manager以外で管理している場合は、Google Tag Managerが非同期で読み込まれる(SDK関数をコールする前にスニペットを実行できない場合がある)ため、混乱をきたす場合があります。この場合は、Webページのhead部のHTMLに書き込むことを推奨します。または、他の方法でGoogle Tag ManagerがSDK関数をコールする前にスニペットを実行するようにしてください。
2. LiftIgniterのリコメンデーションが読み込まれていないウィジェットを上書きしようとする
既存のリコメンデーションをLiftIgniterのりこめんでーしょんでうわがきすのリコメンデーションで上書きしている場合は、上書きするウィジェットの読み込みが終わってから上書きを行うようにしてください。リコメンデーションのregisterとfetchのコールは、取得するリコメンデーションの数がわかっていれば、ウィジェットを読み込む前に行うことができます。
jQueryを組み込んでいる場合は、上書きのcallbackをjQueryにwrapすることができます。この方法は、既存のリコメンデーションがDOMの一部として読み込まれている場合に有効です。その例を下記に説明します。
$p('register',
{
max: 3,
widget: 'your-widget-name',
callback: function(resp) {
jQuery(function() {
overwrite_callback(resp);
// 上書きした領域を'LI'のスライスと定義する。
trackAlgo('LI');
});
}
}
);
}
上書きしようとする既存のリコメンデーションがDOMの一部ではない場合は、そのリコメンデーションが読み込まれたことを判別する方法を考える必要があります。最悪のケースでは、Javascriptの[setTimeout]関数を使って上書きのcallbackを行うまでの時間を指定してください。
3. リコメンデーションを読み込む前にトラッキングがコールされる
LiftIgniterのリコメンデーションでは、リコメンデーション表示のロジックが実行されてから、trackの関数を同じcallbackの中でコールしてください。そうすることで、正常に表示が行われれば、トラッキングも正常に行われるようになります。例えば、jQueryやその他のリスナーの中に表示のロジックをwrapしている場合は、同じcallbackの中で、トラッキングのロジックを表示のロジックのあとに置く必要があります。
既存のリコメンデーションでは、既存のリコメンデーションの読み込みが終わってから、trackの関数をコールしてください。2の項のサンプルと同様に、ページの読み込みを判別するためにjQueryを使用することができます。これは、既存のリコメンデーションがDOMの一部として読み込まれている場合でも有効です。
// マークした領域を'base'または既存のスライスと定義する。
jQuery(function() {
trackAlgo('base');
});