الحصول على التعامل مع الحدث الاستماع في جافا سكريبت

StackOverflow https://stackoverflow.com/questions/174891

سؤال

في الأسبوع الماضي نشرنا Omniture هو رمز تحليلات على كمية كبيرة من المواقع على شبكة الإنترنت بعد ترقيع و اختبار الأسبوع الماضي أو نحو ذلك.

على ما يقرب من جميع قوالب موقع ، فإنه يعمل على ما يرام.في بعض متناثرة, حالات لا يمكن التنبؤ بها ، وهناك تعطيل المتصفح تحطمها تجربة أن قد الابتعاد بعض المستخدمين.

نحن لسنا قادرين على رؤية العلاقة بين تحطمها القوالب في هذا الوقت ، في حين هناك هي العديد من الطرق لاستكشاف ، confuddling لنا هو ذات الصلة إلى المستمعين الحدث.

المواقع تحطم عند أي مرساة على هذه القوالب النقر.ليس هناك أي مضمنة JS, و بينما نحن الحرائق رائد طريقنا من خلال سمات HTML, لم نتمكن من العثور ملحوظ حلقة أو المسألة من شأنه أن يسبب هذا.(بينما نحن استكشاف الأخطاء وإصلاحها ، يمكنك تجربة هذا بنفسك هنا [تحذير!النقر على أي رابط في الصفحة سوف تتسبب في المتصفح الخاص بك إلى التصادم!])

كيف يمكنك تحديد ما إذا كان كائن يحتوي على المستمع أو لا ؟ كيف يمكنك تحديد ما سوف النار عندما يتم تشغيل حدث?

لمعلوماتك, أنا أحب أن تعيين نقاط ، ولكن بين Omnitures فشلا ذريعا غموض التعليمات البرمجية المتكررة المتصفح تعطل, أود أن البحث أكثر جيدا كيف كنت يمكن أن النهج هذا.

هل كانت مفيدة؟

المحلول

لقد قمت بإجراء "فحص العنصر" على الرابط في هذه الصفحة مع الحرائق في دوم التبويب يقول هناك onclick وظيفة (مجهول) و أيضا بعض من وظيفة أخرى تسمى "s_onclick_0".

لقد أقنع الحرائق وضع مشاهدة مثل

alert(document.links[0].onclick)

تنبيه لي onclick وظيفة omniture (اعتقد) وتعلق على الروابط:

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;
}

ربما بنفس الطريقة التي يمكن أن نرى ما هو حقا على التوالي بعد كل هذا التشويش.

نصائح أخرى

دوم لا توفر أي وسيلة introspecting خلال الأحداث المستمعين المجموعات المرتبطة عقدة.

الحالة الوحيدة حيث المستمع يمكن تحديدها عندما تم إضافته من خلال تحديد خاصية أو سمة على عنصر الاختيار على onxxx خاصية أو سمة.

كان هناك حديث مؤخرا على WebAPI المجموعة على W3 على ما إذا كان لإضافة هذه الوظيفة.المتخصصين يبدو أن يكون ضد ذلك.أشارك حججهم.

مجموعة من التوصيات إلى منفذي on-page analytics:

  • استخدام الوثيقة على مستوى الحدث التقاط فقط, هذا هو في كل حالة تقريبا (إلى جانب تغيير/تقديم الأحداث) كافية

  • لا تنفذ حساب كثيفة رمز (فضلا عن أي عمليات IO) في معالجات بدلا من تأجيل التنفيذ مع مهلة

إذا اثنين من هذه القواعد البسيطة تؤخذ في الاعتبار, أراهن على المتصفح الخاص بك وسوف البقاء على قيد الحياة

لدي بعض الخبرة مع 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 ليس في ق.linkInternalFilters الإعداد.إذا كنت تستخدم نفس s_code.js ملف مجالات متعددة ، يمكنك استخدام جافا سكريبت إلى تعيين قيم التكوين عن مثل هذه الأمور (مستندة على الوثيقة.موقع.المضيف على سبيل المثال).

أنا لا شخصيا لدي تجربة مع رابط تتبع التكوين أو سوف تعطيك المزيد من التفاصيل حول كيفية تكوين ذلك :)

أثناء السفر المنزل جئت إلى حل يسمح التأمل من معالجات الأحداث على عنصر مع AddEventListener.تشغيل التعليمات البرمجية قبل إدراج الخاص بك رمز تحليلات.كان رمز لم يتم التحقق إذا كان يعمل ، ولكن الفكرة اعتقد واضح.فإنه لن ينجح في أي ومع ذلك يمكنك تطبيق تقنية مماثلة (إعادة كتابة API الأعضاء) هناك أيضا.

(function(){
  var fAddEventListener = HTMLElement.prototype.addEventListener;
  HTMLElement.prototype.addEventListener = function() {
   if (!this._listeners)
      this._listeners = [];
   this._listeners.push(arguments);
   fAddEventListener.apply(this, arguments);
  }
})();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top