سؤال

لدي مجموعة من الروابط التي تستخدم السمة target="_blank" لفتحها في نافذة جديدة.أريد إرفاق تتبع أهداف Google Analytics بالنقرات على هذه الروابط.

للقيام بذلك، حاولت إرفاق سمة onclick="pageTracker._trackPageview('/event/outgoing')" بالروابط.

لكنني اكتشفت أنه بالنسبة للروابط ذات السمة target="_blank"، يتم تخطي حدث Javascript onclick.لذلك لم يتم تسجيل الهدف.بمعنى آخر، هذا الرابط يسجل الهدف بنجاح:

<a href="http://www.yahoo.com" onclick="pageTracker._trackPageview('/event/outgoing')">Click me</a>

ولكن هذا لا:

<a href="http://www.yahoo.com" target="_blank" onclick="pageTracker._trackPageview('/event/outgoing')">Click me</a>

هل يعرف أحد لماذا قد يحدث هذا؟بافتراض عدم وجود حل سهل، أفترض أنني سأضطر إلى استخدام جافا سكريبت لحل المشكلة.الكود التالي يسجل الهدف بنجاح (ولكنه لا يفتح الرابط):

function attach_goal_tracking() {
    var links = document.getElementsByClassName("buyTicketsLink");
    for(var i=0; i<links.length; i++) {
        links[i].onclick = record_goal;
        }
}

function record_goal(e) {
    e.stop();
    pageTracker._trackPageview('/event/outgoing');
}

ولكن عندما أقوم بإضافة وظيفة Record_goal لفتح الرابط ...

function record_goal(e) {
    e.stop();
    pageTracker._trackPageview('/event/outgoing');
    var newWindow = window.open(this.getAttribute('href'), '_blank');
    newWindow.focus();
    }

...ثم يفشل في تتبع الهدف.

هل يمكن لأحد أن يقول لي لماذا قد يكون هذا، وماذا يجب أن أفعل للتغلب على هذه المشكلة؟لمعلوماتك أنا أستخدم النموذج الأولي لجافا سكريبت.

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

المحلول

قد تكون هناك مشكلة في أدوات حظر النوافذ المنبثقة (أعتقد أن Googlebar) تمنع فتح النافذة، و(مع وجود onclick) منع onclick رمز من التشغيل.على سبيل المثال انظر هذا و هذا مشكلات صوتية مماثلة يواجهها الآخرون.

أو ربما يكون الأمر ببساطة أن رمز معالج النقر يُظهر خطأً يمنع بعد ذلك إكمال بقية الكود.راجع تعليقي على سؤالك بخصوص كيفية ربط الأحداث. e.stop() قد يكون الفشل في IE.

لكن فرضيتك خاطئة. target="_blank" و onclick="..." العمل معًا على ما يرام.

حالة الاختبار في النقطة: http://jsbin.com/anahe (يضيف /edit إلى عنوان url لتحرير الكود). قد تحتاج إلى إيقاف تشغيل مانع (قوائم) النوافذ المنبثقة:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Sandbox</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<script>var clickCount= 0;</script>
</head>
<body>
  <a href="http://www.google.com" target="_blank" onclick="document.getElementById('dbg').innerHTML = ++clickCount">
     open new
  </a>
  <div id="dbg"></div>
</body>
</html>

النقر على الرابط يفتح نافذة جديدة و يقوم بتحديث div بعدد المرات التي تم فيها النقر على الرابط.تم اختبار ذلك في IE6، IE7، FF2، FF3.5، Chrome 2، Chrome 3، Opera 9.

نصائح أخرى

ومن الممكن، المنتصر هو حق e.stop () لا uneccessary، أستطيع أن أؤكد أن التعليمة البرمجية التالية بنجاح فتح علامة تبويب جديدة، وبشكل غير متزامن التنبيهات على علامة التبويب القديم (وبالتالي يجعل من استعادة التركيز).

<a href="" target="_blank">reload</a>

<script>

var as = document.getElementsByTagName('a');
for (var i = 0; i < as.length; i++) {
    var a = as[i];
    a.onclick = function(e) {
        setTimeout(function() {
            alert('hi hi');
        }, 1000);
    }
}

</script>

والقادم أفضل شيء هو أن تكون هناك صفحة تتبع الرابط وتوجيه كل ما تبذلونه من الروابط الخارجية من خلال هذه الصفحة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top