Sentry-javascript: Browser lama menyebabkan [Acara objek] dicatat

Dibuat pada 3 Agu 2015  ·  50Komentar  ·  Sumber: getsentry/sentry-javascript

Seperti yang dijelaskan di utas ini di Stack Overflow , peristiwa tertentu yang dikirim ke window.onerror akan menyebabkan [object Event] dicatat sebagai pesan dan tidak banyak lagi. Akan lebih baik jika Sentry dapat mendeteksi objek kuno Event ini dan menggali beberapa detail darinya sehingga apa yang dicatat ke Sentry adalah sesuatu yang dapat dipahami yang dapat kami tindak lanjuti dan coba perbaiki.

Komentar yang paling membantu

@rollokb – ada berita tentang ini?

Semua 50 komentar

Satu sampel tertentu dari log kami menunjukkan informasi berikut:

  • Peramban: Dolfin 3.0
  • Perangkat: Samsung GT-S8600
  • OS: Bada 2.0

Saya dapat memverifikasi bahwa browser Android dari Android 4.1 hingga 4.4, tampaknya dari ponsel Android pihak ketiga (misalnya Samsung, HTC) juga terpengaruh oleh masalah ini. Saya tidak dapat mengonfirmasi apakah ponsel Nexus terpengaruh.

Ini akan menjadi fitur yang bagus untuk didapatkan, dan tampaknya tidak terlalu sulit untuk diterapkan. Mungkin pemeriksaan cepat jika message.toString() == '[object Event]' dan kemudian for-in loop untuk mengakses properti dari objek acara. Ini akan sangat membantu dalam membantu masalah debug dengan situs di Android 4.1 - 4.4.

@ d10 – Saya telah bereksperimen dengan itu, tetapi saya tidak dapat menemukan browser nyata untuk memverifikasi bahwa itu berfungsi. Saya sudah mencoba meniru Android 4.1 – 4.4 di BrowserStack dan menggunakan browser Android bawaan, tetapi mereka melaporkan kesalahan dengan baik.

Itu akan menjadi fitur yang bagus! Kami memiliki masalah yang sama dengan browser lama!

Ini membuatku gila jadi saya menulis tambalan untuk ini https://github.com/rollokb/raven-js/tree/feat/old-webkit-Event-handling

Saya akan mengujinya dalam produksi sebentar sebelum mengirimkan permintaan tarik.

@rollokb - komit itu tampak hebat. Beri tahu saya bagaimana prosesnya dalam produksi; Saya akan senang untuk menggabungkannya menjadi master sesudahnya.

Besar! Itu membuatku gila juga! +1

Tampaknya bekerja dengan baik dalam produksi.

Sunting:

Tampaknya berfungsi dengan baik, tetapi hanya dengan Acara yang saya picu sendiri. Masih sama sekali tidak mendapatkan informasi tentang isi Acara.

Tampaknya berfungsi dengan baik, tetapi hanya dengan Acara yang saya picu sendiri. Masih sama sekali tidak mendapatkan informasi tentang isi Acara.

Masalahnya mungkin di sini:

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

Dengan mencentang hasOwnProperty , Anda tidak akan mendapatkan properti apa pun yang berasal dari Event.prototype . Kecuali jika browser yang terpengaruh ini melakukan seperti yang Anda lakukan dalam pengujian – menempatkan properti secara langsung pada objek Event yang mereka buat – kami tidak akan melihat data apa pun.

Sisi sebaliknya adalah, jika Anda menghapus centang itu, kita akan mendapatkan banyak properti yang tidak ada hubungannya dengan kesalahan. Tapi mungkin ada baiknya melihat seperti itu.

Kamu mungkin benar. Saya terjebak oleh ini ketika menguji dengan PhantomJS.

Memperbarui cabang
https://github.com/rollokb/raven-js/blob/feat/old-webkit-Event-handling/src/raven.js#L1109 -L1121

Dingin. Sekali lagi, saya menghargai Anda menggali ini.

Sedikit di luar topik, tetapi bagaimana PhantomJS dimuat di proyek ini? Tampaknya menangani properti acara secara tidak benar (yaitu, ia melihat semua alat peraga Acara sebagai miliknya).

Melalui kmiyashiro/grunt-mocha

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

Tampaknya menangani properti acara secara tidak benar (yaitu, ia melihat semua alat peraga Acara sebagai miliknya).

Anda dapat mencoba mengejek objek Acara yang berperilaku sama seperti yang diamati di Chrome/beberapa browser lain. (Semoga browser lawas yang mengirim objek ini merasakan hal yang sama.)

Anda juga dapat mencoba menjalankan tes Phantom2 untuk melihat apakah perilakunya lebih akurat. Saya percaya mereka menjalankan 1.9.8 sekarang.

@rollokb – ada berita tentang ini?

Saya mendapatkan ratusan dari itu hari ini dari Facebook Browser v80 di Android 4. Itu tidak terlalu tua, bukan?

Kami mendapatkan banyak kesalahan ini di Android 4.x dengan Browser Android

Saya mendapatkan ratusan dari itu hari ini dari Facebook Browser v80 di Android 4. Itu tidak terlalu tua, bukan?

Saya cukup yakin "Facebook Browser" hanyalah Facebook yang membungkus apa pun browser web internalnya.

Pada dasarnya, kesalahan ini hanya muncul di banyak ponsel Android versi internasional. Lihatlah daftar perangkat Anda ketika Anda melihat kesalahan tersebut, Anda akan melihat mereka memiliki kode perangkat seperti Samsung GT-S8600 – yang bukan model Amerika Utara/Barat.

Mereka tampaknya menggunakan beberapa garpu browser yang dimaksudkan sebagai "Chrome Mobile" atau "Browser Android" (agen pengguna mudah dipalsukan), tetapi tampaknya memiliki tanda tangan objek Kesalahan yang berbeda. Saya mengalami kesulitan mereproduksi kesalahan (termasuk mencoba membeli beberapa ponsel ini untuk digunakan di kantor), tetapi saya kemungkinan akan mencobanya lagi dalam waktu dekat.

Kami tidak mendapatkan kesalahan itu di browser langka, kami baru saja mendapatkannya di Windows 10 dengan Chrome 51.0.2704

Hai kawan!

Juga saya mendapat laporan Raven

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

di browser seluler di Android. Agen pengguna adalah
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 untuk ini

Jadi, mulai 3.7.0, kami sekarang menghasilkan pelacakan sintetis untuk [object Event] dan objek non-Error lainnya yang tertangkap. Saya akan merekomendasikan mencoba 3.7.0 dan melihat hasil yang Anda dapatkan.

@benvinegar Saya sudah menginstal 3.7.0, tetapi mendapatkan kesalahan ini

Saya menggunakan peretasan berikutnya sebagai solusi sementara:

    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 Sepertinya salah ketik di baris ini:

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

Dan apakah Anda yakin tentang konstruksi ini diperbolehkan:

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

ATAS: Mendapatkan kesalahan "Token tak terduga =>" dengan perbaikan ini

@webschik

2016-09-23 12 45 43

@AlexanderMatveev , ini sintaks ES2015.
Anda bisa menggantinya

@webschik Menambahkan peretasan ini dan sepertinya tidak ada yang berubah, masih mendapatkan kesalahan "[Acara objek]".

@AlexanderMatveev , ini aneh, karena ini berfungsi untuk proyek saya. Mungkin kita perlu lebih banyak penyelidikan di sana

@webschik

Berikut urutan scriptnya:

<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 Saya sudah menginstal 3.7.0, tetapi mendapatkan kesalahan ini

Anda masih akan mendapatkannya. Perbedaannya adalah ia harus menghasilkan jejak tumpukan sintetis. Namun, jika ditangkap karena muncul window.onerror, pelacakan tumpukan mungkin tidak membantu (tetapi akan memberi tahu Anda bahwa begitulah cara menangkapnya).

Sama dengan Raven 3.6.1 pada Sentry yang dihosting untuk 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

Saya juga punya beberapa acara, kebanyakan dari browser Android atau Facebook. Bahkan Facebook 95.0, yang seharusnya baru, memicu kesalahan ini. Android 4. . adalah OS utama dan banyak perangkat yang dilaporkan adalah Samsung-GT [sesuatu]. Saya menggunakan versi 3.7.0.

Kami mendapatkan ini juga dari agen pengguna super generik, tidak ada perangkat khusus:

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

Gagak 3.9.0

masih terjadi di 3.9.1 beberapa ratus kali sehari, di facebook & browser android.name
tidak ada jejak tumpukan apa pun.

haruskah kita abaikan saja?

Sama disini.

Sama seperti semua orang di sini. Jika info ini membantu:

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

Peramban: Facebook 87.0.0

sama gan, ada solusi?? :S

Saya memiliki masalah yang sama

image

Saat ini saya memiliki masalah yang sama ... ada banyak kesalahan ini dan saya segera mencapai ambang penjaga

Saya mendapatkan lusinan masalah ini, semuanya dengan Chrome 45 di Windows 10.

Itu masih terjadi di raven 3.15.0, di facebook & browser android
Haruskah kita mengabaikannya saja?

Adakah yang menemukan solusi? Dalam kasus saya muncul ini di penjaga:

`[Acara objek]

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

unhandledPromiseRejection: benar

Agen pengguna: Mozilla/5.0 (Linux; U; Android 6.0.1; en-US; vivo 1610 Build/MMB29M) AppleWebKit/537.36 (KHTML, seperti Gecko) Versi/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.8.1112 Mobile Safari /537.36

Keluarga perangkat: vivo 1610
Model perangkat: 1610
Merek perangkat: vivo

Android 6.0.1

UC Browser 12.5.8

Versi klien raven-js saya adalah: 3.25.0

Saya melampirkan tangkapan layar kesalahan (terjadi berkali-kali dengan banyak browser lama)
raven-screenshot

Ini dapat diperbaiki di SDK baru menggunakan petunjuk peristiwa dan penanganan kesalahan khusus.

@kamilogorek

Ini dapat diperbaiki di SDK baru menggunakan petunjuk peristiwa dan penanganan kesalahan khusus.

Bisakah Anda menguraikan ini? Adakah tautan ke dokumen?
Setidaknya versi mana yang kita butuhkan?
Saya lebih suka memiliki cuplikan kode dari pengaturan "petunjuk acara" dan "penanganan kesalahan khusus" untuk masalah ini.

Terima kasih!

@hiroshi silakan lihat https://github.com/getsentry/sentry-javascript/issues/1401#issuecomment -418631326
Ini adalah fitur SDK javascript penjaga baru, yang telah dirilis sebagai RC Today. Itu tidak akan porting kembali ke raven-js/node.js.

Hai, saya terus melihat kesalahan seperti ini di Sentry:

exception | Error: [object Event]

Tidak ada jejak tumpukan terlampir dan tidak ada informasi yang berguna. Dari sesi LogRocket, tampaknya pengguna tidak mengalami masalah. Saya memang melihat beberapa permintaan yang diblokir ke Facebook dan Google Pengelola Tag, jadi saya curiga mereka memasang ekstensi pemblokir.
Ini adalah kesalahan berulang dari seseorang yang menggunakan Chrome 75, bukan browser yang sangat lama.
Adakah saran bagaimana saya akan menyelesaikan masalah ini?

Terima kasih

Catatan: @sentry/browser versi 5.3.0

@burtyish memperbarui ke versi terbaru adalah langkah pertama yang baik. Kami memperkenalkan _banyak_ perubahan terkait perilaku ini di 5.7.0

@kamilogorek Terima kasih!
Saya melihat kesalahan yang jauh lebih informatif sekarang setelah saya meningkatkan ke sentry.javascript.browser v5.12.1.
Dan saya juga punya jejak tumpukan!

@burtyish luar biasa! :)

Apakah halaman ini membantu?
0 / 5 - 0 peringkat