إنشاء عنوان الصفحة وحدث page:changed

هذا السؤال يتعلق بتفاصيل دقيقة في واجهة برمجة التطبيقات (API).

أنا أستخدم نسخة مشتقة (fork) من مكون قالب Matomo الممتاز. يتيح هذا تتبع صفحات العرض باستخدام Matomo. نسختي المشتقة هي محاولة لتجاوز بعض المشكلات. وهي في جوهرها مطابقة للنسخة الأصلية. السلوك الموصوف أدناه يحدث أيضًا مع المكون الأصلي.

يستخدم المكون استدعاء onPageChange لتكوين واجهة برمجة تطبيقات/مرافق Matomo.

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

النتيجة هي أن سجل Matomo يحتوي على مزيج من عناوين الصفحات المكتملة وتلك غير المكتملة.

عند النظر إلى كود مصدر Discourse، يُستدعى هذا قبل تفعيل page:changed:

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/lib/page-tracker.js#L31

يبدو أن كل شيء يعمل كما يجب - يجب أن يتم تحديث العنوان بحلول الوقت الذي يُستدعى فيه onPageChange. لكن هذا لا يحدث - على الأقل ليس بشكل متسق.

هناك مشكلة أخرى قد تكون ذات صلة. يُستدعى onPageChange في بعض الأحيان مرتين. هذا هو حل العمل الخاص بي (وهو الدافع وراء إنشاء النسخة المشتقة):

في الحالة التي يُستدعى فيها onPageChange مرتين لنفس عرض الصفحة، يوفر أحد الاستدعاءات حجة url تختلف عن موقع النافذة الحالي. أقوم بفحص ذلك والخروج مبكرًا.

(لاحظ أنني أتعامل مع حدث page:changed عبر onAppEvent بدلاً من onPageChange، لكنني أرى نفس السلوك في كلتا الحالتين.)

لقد قمت باختبار ما إذا كان العنوان يتم تعيينه باستخدام الكود التالي:

<script type="text/discourse-plugin" version="0.2">
api.onPageChange( (url, title) => {
    console.log('url', url);
    console.log('title', title)
})
</script>

ما لاحظته هو أنه إذا قمت بإنشاء موضوع جديد، فإن عنوان الموضوع لا يتم تعيينه عند استدعاء api.onPageChange الذي يحدث فورًا بعد إنشاء الموضوع. في هذه الحالة، يتم استخدام عنوان الموقع بدلاً من ذلك. هل يبدو أن هذا ما يحدث في موقعك؟ إذا لم تكن ترى أي عنوان على الإطلاق، فتأكد من أنك قد ملأت إعدادات الموقع title و site description. توجد هذه الإعدادات في علامة التبويب “Required” (المطلوبة) في صفحة إعدادات موقعك.

شكرًا لك على متابعة هذا يا سايمون. هذا ليس ما أراه. لقد قمت بإعداد تسجيل للشاشة وسأرسل لك رابطًا خارجيًا بالإضافة إلى مرجع لمصدر مكون المظهر المستخدم.

الفكرة العامة هي أن العناوين لا يتم عرضها عند الاستدعاء الأول للموضوع من تطبيق مُحمَّل. في صفحة الدخول (أي عند تحميل التطبيق لأول مرة)، أرى العنوان في onPageChanged وفي أي صفحة تلي الأولى. أتمنى أن يجعل التسجيل هذا الأمر أكثر وضوحًا :slight_smile: