7

先週、私たちは Omniture の分析コードを大量の Web サイトにリリースしました。この 1 週間ほどの間、試行錯誤とテストを行ってきました。

ほとんどすべてのサイト テンプレートで問題なく動作します。いくつかの散在する予測不可能な状況では、一部のユーザーを遠ざける可能性のある、機能を損なうようなブラウザのクラッシュが発生します。

現時点では、クラッシュするテンプレート間の関係を確認できません。トラブルシューティングに多くの方法がありますが、当惑しているのはイベント リスナーに関連するものです。

これらのテンプレートのアンカーをクリックすると、サイトがクラッシュします。インライン JS はありません。HTML の属性を調べてみましたが、これを引き起こす識別可能なループや問題は見つかりませんでした。(トラブルシューティング中は、こちらでこれを体験できます[警告!ページ内のリンクをクリックすると、ブラウザがクラッシュします!])

オブジェクトにリスナーがあるかどうかをどのように判断しますか? イベントがトリガーされたときに起動するものをどのように決定しますか?

参考までに、私はブレークポイントを設定したいと思っていますが 、Omnitures がひどく難読化されたコードと繰り返されるブラウザ クラッシュの間で、これにどのようにアプローチできるかをより徹底的に調査したいと思います。

4

5 に答える 5

4

そのページのリンクでfirebugを使用して「要素の検査」を実行しましたが、[DOM]タブに、onclick関数(匿名)と「s_onclick_0」と呼ばれる他の関数があると表示されます。

私は次のような時計を置いて火の虫をだましました

alert(document.links[0].onclick)

オムニチュア(おそらく)がリンクにアタッチするonclick関数を私に警告するには:

function anonymous(e) {
  var s = s_c_il[0], b = s.eh(this, "onclick");
  s.lnk = s.co(this);
  s.t();
  s.lnk = 0;
  if (b) {
     return this[b](e);
  }
  return true;
}

たぶん同じように、その難読化の後で実際に何が実行されているかを見ることができます。

于 2008-10-06T16:51:05.697 に答える
1

DOMは、ノードに関連付けられたイベントリスナーのコレクションをイントロスペクトする手段を提供しません。

リスナーを識別できる唯一の状況は、要素にプロパティまたは属性を設定することでリスナーが追加された場合です。onxxxのプロパティまたは属性を確認してください。

最近、W3のWebAPIグループで、この機能を追加するかどうかについて話し合いがありました。専門家はそれに反対しているようです。私は彼らの議論を共有します。

于 2008-10-06T16:34:31.797 に答える
0

オンページ分析の実装者への一連の推奨事項:

  • ドキュメント レベルのイベント キャプチャのみを使用します。ほとんどの場合 (変更/送信イベントを除く)、これで十分です。

  • ハンドラーで計算集約型のコード (およびすべての IO 操作) を実行しないでください。むしろ、タイムアウトで実行を延期してください。

この 2 つの単純なルールを考慮に入れれば、あなたのブラウザーはきっと生き残るでしょう。

于 2008-10-06T16:43:12.543 に答える
0

家に帰る途中、AddEventListener で追加された要素のイベント ハンドラーのイントロスペクションを可能にするソリューションにたどり着きました。分析コードを含める前にコードを実行します。コードが機能するかどうかは検証されていませんが、アイデアは明らかです。IE では機能しませんが、(API メンバーを書き換える) 同様の手法を IE でも適用できます。

(function(){
  var fAddEventListener = HTMLElement.prototype.addEventListener;
  HTMLElement.prototype.addEventListener = function() {
   if (!this._listeners)
      this._listeners = [];
   this._listeners.push(arguments);
   fAddEventListener.apply(this, arguments);
  }
})();
于 2008-10-06T17:44:28.257 に答える
0

私は Omniture でいくつかの経験があり、あなたの s_code.js を見ています。たとえば、「リンク トラッキング」領域でいくつかのことが起こっています。


/* Link Tracking Config */
s.trackDownloadLinks=true
s.trackExternalLinks=true
s.trackInlineStats=true
s.linkDownloadFileTypes="exe,zip,wav,mp3,mov,mpg,avi,wmv,pdf,doc,docx,xls,xlsx,ppt,pptx"
s.linkInternalFilters="javascript:,gatehousemedia.com"
s.linkLeaveQueryString=false
s.linkTrackVars="None"
s.linkTrackEvents="None"

Omniture の担当者に相談し、リンク トラッキングの設定が正しく設定されていることを確認します。

具体的には、このテンプレートとその中のリンクは、morningsun.net に属しているように見えますが、morningsun.net は s.linkInternalFilters 設定に含まれていません。複数のドメインで同じ s_code.js ファイルを使用している場合は、javascript を使用して、このような構成値を設定できます (たとえば、document.location.hostname に基づいて)。

私は個人的にリンク追跡構成の経験がないか、構成方法について詳しく説明します:)

于 2008-10-07T04:29:27.703 に答える