أخطاء JS

جميع أنواع أخطاء Javascript.

أخطاء JS

يسرد هذا القسم أكثر أخطاء Javascript شيوعًا والتي أبلغ عنها مجتمعنا.

يحدث هذا الخطأ (وكذلك الخطأ أدناه) عادةً عندما تحاول استيراد المتعقّب داخل سياق من جانب الخادم (SSR، تطبيقات Nuxt وNext وRemix وما إلى ذلك).

يتطلب إصلاحه التأكد من أن المتعقّب يُستورد ويُشغَّل داخل سياق المتصفح، عبر الاستيرادات الديناميكية ومكوّنات العميل وما إلى ذلك.

ReferenceError: Navigator is not defined

Section titled ReferenceError: Navigator is not defined

يحدث هذا الخطأ أحيانًا عندما تحاول استيراد إضافتي tracker-assist أو tracker-fetch، ويحدث ذلك لأن node يحاول بناء الصفحة دون توفّر واجهة window API في البيئة.

الإصلاح بسيط إلى حدٍّ ما. كل ما عليك فعله هو تغيير الاستيراد العادي للإضافة المسبِّبة للمشكلة:

import trackerAssist from '@openreplay/tracker-assist/cjs';

إلى استيراد ديناميكي داخل componendDidMount أو البديل useEffect:

import Tracker, { Options } from "@openreplay/tracker";
const tracker = new Tracker({ /* your options */ });

class TrackerComponent extends React.Component {

  componentDidMount = () => {
    import(‘@openreplay/tracker-assist/cjs’).then(({ default: trackerAssist }) => {
      tracker.start(/* your options */)
      tracker.use(trackerAssist(/* your assist options */))
    })
   }

 /* Other code */

بهذه الطريقة، سيتم استيراد جميع الإضافات المعتمِدة على واجهة window API عند تصيير المكوّن.

Critical dependency: the request of a dependency is an expression

Section titled Critical dependency: the request of a dependency is an expression

قد يحدث هذا مع الإصدارات القديمة من إضافة tracker-assist. ينبغي عليك تطبيق هذا الحل البديل إذا واجهت الخطأ أدناه أثناء عملية الترجمة (compiling):

Failed to compile.

./node_modules/peerjs/dist/peerjs.min.js
Critical dependency: the request of a dependency is an expression

Uncaught DOMException: Blocked a frame with origin “X” from accessing a cross-origin frame

Section titled Uncaught DOMException: Blocked a frame with origin “X” from accessing a cross-origin frame

يلتقط متعقّب OpenReplay إطارات iFrame من النطاق نفسه بشكل افتراضي. ومع ذلك، فإنه يُطلق خطأً عندما يحاول التقاط إطار iFrame ليس من النطاق نفسه لموقعك الإلكتروني. يمكنك إمّا:

  • تعطيل الوظيفة بالكامل باستخدام الخاصية captureIFrames كما في المثال أدناه:
tracker.configure({
      projectKey: PROJECT_KEY,
      captureIFrames: false
});
  • الاستمرار في التقاط إطارات iFrame (السلوك الافتراضي) بإضافة سمة HTML المسمّاة data-openreplay-capture إلى وسوم <iframe> من النطاق نفسه فقط. بهذه الطريقة، لن يتعقّب OpenReplay إطارات iFrame ذات النطاقات المختلفة (cross-origin).

إذا واجهت أي أخطاء غير مدرجة في هذه الصفحة، فلا تتردد في فتح مشكلة (issue) أو ببساطة التواصل معنا عبر Slack أو الاطّلاع على المنتدى للحصول على المساعدة من مجتمعنا.

إذا كانت لديك أي أسئلة حول هذه العملية، فلا تتردد في التواصل معنا عبر Slack أو الاطّلاع على المنتدى.