Sentry-javascript: المتصفحات القديمة تتسبب في تسجيل [حدث الكائن]

تم إنشاؤها على ٣ أغسطس ٢٠١٥  ·  50تعليقات  ·  مصدر: getsentry/sentry-javascript

تمامًا كما هو موضح في هذا الموضوع على Stack Overflow ، فإن بعض الأحداث المرسلة إلى window.onerror ستتسبب في تسجيل [object Event] كرسالة وليس أشياء أخرى كثيرة. سيكون من الرائع أن يتمكن Sentry من اكتشاف هذه الكائنات القديمة Event واستخراج بعض التفاصيل منها ، لذا فإن ما يتم تسجيله في Sentry هو شيء واضح يمكننا العمل عليه ومحاولة إصلاحه.

التعليق الأكثر فائدة

rollokb - أي أخبار عن هذا؟

ال 50 كومينتر

تُظهر عينة واحدة معينة من سجلاتنا المعلومات التالية:

  • المتصفح: Dolfin 3.0
  • الجهاز: Samsung GT-S8600
  • نظام التشغيل: Bada 2.0

يمكنني التحقق من أن مستعرض Android من Android 4.1 إلى 4.4 ، على ما يبدو من هواتف Android التابعة لجهات خارجية (مثل Samsung و HTC) تتأثر بالمثل بهذه المشكلة. لا يمكنني تأكيد ما إذا كانت هواتف Nexus قد تأثرت.

ستكون هذه ميزة رائعة للحصول عليها ، ولا يبدو أنها صعبة التنفيذ نسبيًا. ربما تحقق سريعًا مما إذا كان message.toString() == '[object Event]' ثم حلقة for-in للوصول إلى خصائص كائن الحدث. سيكون هذا رائعًا في المساعدة في تصحيح الأخطاء في موقع يعمل بنظام Android 4.1 - 4.4.

@ d10 - لقد جربت ذلك ، لكن لا يمكنني العثور على متصفح حقيقي للتحقق من أنه يعمل. لقد حاولت محاكاة Android 4.1 - 4.4 على BrowserStack واستخدام متصفح Android للمخزون ، لكنهم أبلغوا عن أخطاء على ما يرام.

ستكون ميزة رائعة! لدينا نفس المشاكل مع المتصفحات القديمة!

كان هذا يقودني إلى الجنون ، لذلك كتبت تصحيحًا لهذا https://github.com/rollokb/raven-js/tree/feat/old-webkit-Event-handling

سأختبرها في الإنتاج قليلاً قبل إرسال طلب السحب.

rollokb - يبدو هذا الالتزام رائعًا. اسمحوا لي أن أعرف كيف تسير الأمور في الإنتاج ؛ سأكون سعيدًا لدمجها في الماجستير بعد ذلك.

باهر! إنه يقودني إلى الجنون أيضًا! +1

يبدو أنه يعمل بشكل جيد في الإنتاج.

تعديل:

يبدو أنه يعمل بشكل جيد ، ولكن فقط مع الأحداث التي شجعت نفسي عليها. ما زلت لا أحصل على أي معلومات على الإطلاق حول محتويات الحدث.

يبدو أنه يعمل بشكل جيد ، ولكن فقط مع الأحداث التي شجعت نفسي عليها. ما زلت لا أحصل على أي معلومات على الإطلاق حول محتويات الحدث.

من المحتمل أن تكون المشكلة هنا:

+        for (var property in event) {
+            if (event.hasOwnProperty(property)) {
+                options.extra[property] = event[property];
+            }
+         }

بتحديد hasOwnProperty ، لن تحصل على أي خصائص مشتقة من Event.prototype . ما لم تكن هذه المتصفحات المتأثرة تعمل كما تفعل في اختبارك - بوضع الخصائص مباشرة على الكائن Event الذي قاموا بإنشائه - فلن نرى أي بيانات.

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

ربما أنت على حق. لقد لفت انتباهي هذا عند الاختبار مع PhantomJS.

تحديث الفرع
https://github.com/rollokb/raven-js/blob/feat/old-webkit-Event-handling/src/raven.js#L1109 -L1121

رائع. مرة أخرى ، أقدر لك التعمق في هذا الأمر.

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

عبر kmiyashiro / grunt-mocha

https://github.com/getsentry/raven-js/blob/master/Gruntfile.js#L193

يبدو أنه يتعامل مع خصائص الحدث بشكل غير صحيح (على سبيل المثال ، يرى جميع خاصيات الحدث على أنها خاصة به).

يمكنك محاولة الاستهزاء من كائن حدث يتصرف كما هو ملاحظ في Chrome / بعض المستعرضات الأخرى. (نأمل أن تشعر المتصفحات القديمة التي ترسل هذه الكائنات بالمثل).

يمكنك أيضًا محاولة إجراء الاختبارات لتشغيل Phantom2 لمعرفة ما إذا كان السلوك أكثر دقة. أعتقد أنهم يشغلون 1.9.8 الآن.

rollokb - أي أخبار عن هذا؟

حصلت على المئات من هؤلاء اليوم من Facebook Browser v80 على Android 4. هذا ليس قديمًا حقًا ، أليس كذلك؟

نتلقى العديد من هذه الأخطاء على Android 4.x مع متصفح Android

حصلت على المئات من هؤلاء اليوم من Facebook Browser v80 على Android 4. هذا ليس قديمًا حقًا ، أليس كذلك؟

أنا متأكد من أن "Facebook Browser" هو مجرد غلاف Facebook مهما كان متصفح الويب الداخلي.

في الأساس ، يظهر هذا الخطأ فقط في مجموعة من الإصدارات الدولية لهواتف Android. ألقِ نظرة على قائمة أجهزتك عندما ترى مثل هذه الأخطاء ، ستلاحظ أن لديهم رموز جهاز مثل Samsung GT-S8600 - وهي ليست من طرازات أمريكا الشمالية / الغربية.

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

لا نحصل على هذه الأخطاء في المتصفحات النادرة ، لقد حصلنا عليها للتو على Windows 10 مع Chrome 51.0.2704

أهلا يا أصدقاء!

أيضا لدي تقرير Raven

...
"exception": {
  "values": [
    {
      "value": "[object Event]",
      "stacktrace": {
        "frames": [
          ...
        ]
      }
    }
  ]
}

في متصفح الهاتف على Android. وكيل المستخدم هو
Mozilla/5.0 (Linux; U; Android 4.4.2; de-de; GT-N7100 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

+1 لهذا

لذا ، اعتبارًا من 3.7.0 ، نقوم الآن بإنشاء آثار تركيبية لـ [object Event] وغيرها من الكائنات التي لا تحتوي على أخطاء. أوصي بتجربة الإصدار 3.7.0 ومعرفة النتائج التي تحصل عليها.

benvinegar لديّ 3.7.0 مثبتًا ، لكني حصلت على هذا الخطأ

أنا أستخدم الاختراق التالي كحل مؤقت:

    Raven.install();

    if (Raven._processException) {
        const oldProcessException = Raven._processException;

        Raven._processException = function (event, message) {
            if (message && typeof message === 'object') {
                // detect that it's an event
                if (String(message) === '[object Event]') {
                    // message
                    message = stringifyEvent(message);

                    // type
                    event = event || 'event';
                } else {
                    // stringify the other objects
                    try {
                        message = JSON.stringify(message);
                    } catch (e) {
                        //
                    }
                }

                arguments[0] = event;
                arguments[1] = message;
            }

            return oldProcessException.apply(this, arguments);
        };
    }

    function stringifyEvent (event) {
        const data = {
            eventPhase: event.eventPhase,
            type: event.type,
            isTrusted: event.isTrusted,
            returnValue: event.returnValue,
            timeStamp: event.timeStamp
        };

        if (event.target) {
            data.target = {
                src: event.target.src,
                tagName: event.target.tagName || 'UNKNOWN_HTMLELEMENT',
                className: event.target.className,
                readyState: event.target.readyState
            };
        }

        if (event.path) {
            data.path = event.path.map((el) => {
                const tagName = el.tagName || 'UNKNOWN_HTMLELEMENT';
                const className = (el.className || '').replace(/\s+/, '');

                // DIV.class-1.class-2
                return `${ tagName }.${ className }`;
            });
        }

        return JSON.stringify(data);
     }

webschik يبدو وكأنه خطأ مطبعي في هذا السطر:

return `${ tagName }.${ className }`;

وهل أنت متأكد من أن هذا البناء مسموح به:

data.path = event.path.map((el) => {

UP: الحصول على خطأ "رمز مميز غير متوقع =>" في هذا الإصلاح

تضمين التغريدة

2016-09-23 12 45 43

AlexanderMatveev ، إنه بناء جملة ES2015.
يمكنك استبداله

webschik أضاف هذا الاختراق ويبدو أنه لم يتغير شيء ، ولا يزال يظهر خطأ "[حدث الكائن]" فقط.

AlexanderMatveev ، هذا غريب ، لأن هذا يصلح لمشروعي. ربما نحتاج إلى مزيد من التحقيقات هناك

تضمين التغريدة

هنا ترتيب البرامج النصية:

<script type="text/javascript" src="[raven.min.js version 3.7.0]"></script>
<script>
    Raven.config('https://[...]@sentry.io/[...]', {
        release: '[...]'
    }).install();
</script>
<script type="text/javascript" src="[fix.js without first Raven.install() line]"></script>

benvinegar لديّ 3.7.0 مثبتًا ، لكني حصلت على هذا الخطأ

ستظل تحصل عليه. الفرق هو أنه يجب أن يولد أثرًا كومة اصطناعية. ومع ذلك ، إذا تم اكتشافه لأنه فقاعات تصل إلى window.on Error ، فقد لا يكون تتبع المكدس مفيدًا (لكنه سيخبرك كيف يتم اكتشافه).

كان الأمر نفسه مع Raven 3.6.1 على Sentry المستضاف لـ UA: Mozilla/5.0 (Linux; U; Android 3.1; en-gb; GT-P7500 Build/HMJ37) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13

لدي أيضًا العديد من الأحداث ، معظمها من متصفح Android أو Facebook. حتى Facebook 95.0 ، الذي يجب أن يكون حديثًا ، يتسبب في حدوث هذا الخطأ. أندرويد 4 .. هو نظام التشغيل الرئيسي والعديد من الأجهزة التي تم الإبلاغ عنها هي Samsung-GT [شيء ما]. أنا أستخدم الإصدار 3.7.0.

لقد حصلنا على هذا أيضًا من وكيل مستخدم فائق الجودة ، ولا توجد أجهزة خاصة:

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36

رافين 3.9.0

لا يزال يحدث في 3.9.1 بضع مئات من المرات في اليوم ، على facebook و android browser.name
لا يوجد أثر كومة على الإطلاق.

يجب علينا فقط تجاهلها؟

كذلك هنا.

نفس الشيء تمامًا مثل الجميع هنا. إذا كانت هذه المعلومات تساعد:

image

UA: Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; GT-I8190L Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 [FB_IAB/FB4A;FBAV/87.0.0.17.79;]

المتصفح: Facebook 87.0.0

نفس الشيء هنا اي حل ؟؟ :س

لدي نفس المشكلة

image

لدي نفس المشكلة حاليًا ... هناك الكثير من هذه الأخطاء وأصل إلى حد الحراسة قريبًا جدًا 😞

أتلقى العشرات من هذه المشكلات ، كل ذلك مع Chrome 45 على نظام التشغيل Windows 10.

لا يزال يحدث على raven 3.15.0 ، على متصفح facebook و android
هل يجب علينا فقط تجاهلها؟

أي شخص وجد حلا؟ في حالتي يظهر هذا في الحراسة:

`[حدث الكائن]

في trimHeadFrames (./ node_modules / raven-js / src / raven.js: 562: 1)
في _logDebug (./ node_modules / raven-js / src / raven.js: 488: 1)
في G._promiseRejectionHandler (./ node_modules / raven-js / src / raven.js: 430: 1)

unhandledPromiseRe رفض: صحيح

وكيل المستخدم: Mozilla / 5.0 (Linux؛ U؛ Android 6.0.1؛ en-US؛ vivo 1610 Build / MMB29M) AppleWebKit / 537.36 (KHTML ، مثل Gecko) الإصدار / 4.0 Chrome / 57.0.2987.108 UCBrowser / 12.5.8.1112 Mobile Safari /537.36

عائلة الجهاز: vivo 1610
طراز الجهاز: 1610
ماركة الجهاز: vivo

أندرويد 6.0.1

متصفح UC 12.5.8

إصدار عميل raven-js الخاص بي هو: 3.25.0

لقد أرفقت لقطة شاشة للخطأ (يحدث عدة مرات مع العديد من المتصفحات القديمة)
raven-screenshot

يمكن إصلاح هذا في SDK الجديد باستخدام تلميحات الأحداث ومعالجة الأخطاء المخصصة.

تضمين التغريدة

يمكن إصلاح هذا في SDK الجديد باستخدام تلميحات الأحداث ومعالجة الأخطاء المخصصة.

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

شكرا!

hiroshi يرجى الاطلاع على https://github.com/getsentry/sentry-javascript/issues/1401#issuecomment -418631326
إنها إحدى ميزات برنامج Sentry-javascript SDK الجديد ، والذي تم إصداره باعتباره RC اليوم. لن يتم إرجاعه إلى raven-js / node.

مرحبًا ، ما زلت أرى خطأ مثل هذا في Sentry:

exception | Error: [object Event]

لا يوجد تتبع مكدس مرفق ولا توجد معلومات مفيدة. من جلسات LogRocket ، يبدو أن المستخدم لا يواجه أي مشاكل. أرى بعض الطلبات المحظورة إلى Facebook و Google Tag Manager ، لذلك أظن أن لديهم ملحق مانع مثبتًا.
إنه خطأ متكرر من شخص يستخدم Chrome 75 ، وليس متصفحًا قديمًا جدًا.
أي اقتراحات كيف يمكنني توضيح هذه المشكلة؟

شكرا

ملاحظة: @ sentry / browser version 5.3.0

burtyish التحديث إلى أحدث إصدار هو الخطوة الأولى الجيدة. قدمنا ​​_ الكثير_ من التغييرات بخصوص هذا السلوك في 5.7.0

kamilogorek شكرا!
أرى خطأ إعلاميًا أكثر بكثير الآن بعد أن قمت بالترقية إلى sentry.javascript.browser v5.12.1.
ولدي تتبع كومة أيضًا!

تضمين التغريدة :)

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات