---
title: "أصلح خطأ Script error الذي يخفي رسالته وملفه وسطره"
description: "Script error. مع السطر 0 وبلا مكدّس يعني أن المتصفح أخفى خطأ من سكربت في مصدر آخر. أضف crossorigin وترويسة CORS لتستعيد الرسالة."
canonical: "https://logbrew.co/ar/errors/script-error"
last_updated: "2026-11-10"
---

# أصلح خطأ Script error الذي يخفي رسالته وملفه وسطره

`Script error.` مع السطر 0 وبلا مكدّس يعني أن المتصفح أخفى خطأ من سكربت في مصدر آخر. أضف `crossorigin` وترويسة CORS لتستعيد الرسالة.

اختُبر في 10 نوفمبر 2026 باستخدام Chromium 152 و@logbrew/browser 0.1.21 و@logbrew/sdk 0.1.44

بقلم [Furkan Erday](https://github.com/furkanerday). Furkan Erday مؤسس LogBrew، ويبني LogBrew كل يوم باستخدام Claude Code وCodex.

Canonical: https://logbrew.co/ar/errors/script-error

## ما تعرفه الصفحة من سكربت يرمي خطأ

| كيف يُحمّل السكربت | السكربت عمل | تفاصيل الخطأ |
| --- | --- | --- |
| من مصدر الصفحة نفسه | عمل | كاملة |
| من مصدر آخر | عمل | `Script error.` |
| مصدر آخر مع `crossorigin` وترويسة CORS | عمل | كاملة |
| مصدر آخر مع `crossorigin` ودون ترويسة | حُظر | لا شيء |

1 سكربت حُمّل بـ4 طرق. كاملة تعني الرسالة والملف والسطر 1 والعمود 7 والمكدّس، مقروءة من الحدث `error` على `window`.

## استعد الخطأ الكامل

### حمّل السكربت مع السمة crossorigin

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

```bash
<script src="https://cdn.example.com/app.js" crossorigin="anonymous"></script>
```

### أرسل ترويسة CORS من خادم الملف

يجب أن يرد الخادم الذي يستضيف السكربت بالترويسة `Access-Control-Allow-Origin` مضبوطة على مصدر صفحتك، أو على `*` للملف العام. في اختبارنا حوّلت الترويسة وحدها `Script error.` إلى الرسالة الكاملة.

```bash
Access-Control-Allow-Origin: *
```

### تأكد أن الملف ما زال يُحمّل

مع ضبط `crossorigin` ودون ترويسة، يحظر المتصفح الملف ولا يعمل السكربت أبدًا. تعرض وحدة التحكم عندها `blocked by CORS policy` و`net::ERR_FAILED`، ويطلق العنصر `script` الحدث `error`.

المخرجات

```text
Access to script at 'http://127.0.0.1:4874/plain/throws.js?scenario=script-cross-origin-attr-no-header' from origin 'http://127.0.0.1:4873' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Failed to load resource: net::ERR_FAILED
```

### أو قدّم السكربت من مصدرك أنت

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

## تعامل مع الأخطاء المكتومة التي ما زالت تصلك

### عدّها، ثم اعثر على السكربت

`Script error.` لا يحمل شيئًا يمكن إصلاحه. كل واحد منها يعني أن سكربتًا في مصدر آخر رمى خطأ. اعثر على الوسوم التي بلا `crossorigin` وابدأ بتلك التي تُحمّل في كل صفحة.

### اقرأ الرسالة الحقيقية في وحدة التحكم

يطبع المتصفح الخطأ الكامل في وحدة التحكم حتى عندما يكتمه عن مستمعيك. في اختبارنا عرضت وحدة التحكم `Uncaught Error: Keg is empty` بينما تلقّى `window.onerror` الرسالة `Script error.`.

### قرّر ما تفعله بوسوم الطرف الثالث

ودجة الدردشة أو وسم التحليلات بلا ترويسة CORS يترك لك خيارين. الخيار 1 أن تبقيه كما هو وتتقبل الأخطاء المكتومة. الخيار 2 أن تضيف `crossorigin` فيحظر غياب الترويسة الوسم ويظهر كفشل تحميل بدلًا من ذلك.

## ما رأيناه في الاختبار

وضعنا 1 سكربت يرمي خطأ، `throw new Error("Keg is empty: no beer left for order 42");`، على 2 خادم محلي. عملت الصفحة على `http://127.0.0.1:4873` في Chromium 152 مع `@logbrew/browser` 0.1.21 مثبّتًا، وقام خادم ثانٍ على `http://127.0.0.1:4874` بدور CDN. حمّلنا السكربت بـ4 طرق وقرأنا الحدث `error` على `window` في كل مرة.

من مصدر الصفحة نفسه، حمل الحدث `Uncaught Error: Keg is empty: no beer left for order 42` والملف `/throws.js` والسطر 1 والعمود 7 وكائن `Error` فيه مكدّس. ومن المصدر الآخر دون `crossorigin`، حمل الحدث `Script error.` واسم ملف فارغًا والسطر 0 والعمود 0 ولا كائن `Error`. وما زالت وحدة التحكم تطبع الرسالة الكاملة.

مع `crossorigin="anonymous"` و`Access-Control-Allow-Origin: *` على CDN، حمل الحدث التفاصيل الكاملة من جديد. ومع السمة ودون ترويسة، حظر المتصفح الملف ولم يعمل السكربت أبدًا، وأطلق العنصر `script` الحدث `error`.

## لماذا يخفي المتصفح الرسالة

يكتم معيار HTML أخطاء السكربتات التي جلبتها الصفحة من مصدر آخر (origin) دون CORS. تضبط خوارزميته muted errors عندما يكون الرد CORS-cross-origin، ثم تبلّغ عن الخطأ بوصفه `Script error.` بلا URL، وبالسطر 0 والعمود 0 ودون كائن خطأ.

يعامل المتصفح نص خطأ السكربت من مصدر آخر على أنه بيانات ذلك السكربت، فلا تحصل الصفحة على شيء منه. وتقول صفحة MDN عن `crossorigin` الشيء نفسه في 1 سطر. فالوصول إلى تسجيل الأخطاء عبر `window.onerror` محدود لهذه السكربتات.

طلب البلاغ whatwg/html#2440 طريقة للحصول على التفاصيل دون CORS. وأُغلق في يوليو 2024، في اليوم نفسه الذي فُتح فيه whatwg/html#10514 ليبلّغ أن المتصفحات لا تكتم الحالات نفسها بالطريقة نفسها. وما زال ذلك البلاغ مفتوحًا.

## ما يسجّله LogBrew

مع التفاصيل الكاملة، أرسل SDK المتصفح 1 مشكلة باسم `Browser error: Error` مع إطار مكدّس للملف `/throws.js` عند السطر 1 والعمود 7، ومسار الملف المصدري، ومفتاح التجميع `browser.error:Error:/throws.js`. يحصل كل سكربت يرمي خطأ على مشكلة خاصة به.

مع الخطأ المكتوم، حملت المشكلة الاسم نفسه، ولا إطارات مكدّس، والسطر 0 والعمود 0، ومفتاح التجميع `browser.error:Error`. تتشارك الأخطاء المكتومة تلك المشكلة 1، لذلك يخبرك عددها بعدد الأخطاء التي لا تستطيع رؤيتها بعد.

حمل الحدثان مسار الصفحة، وبيئة التشغيل `Chromium 152` على `macOS`، وعنصر breadcrumb من النوع `page_view`. ولم يحمل أي منهما نص الرسالة. فقد وسمه SDK بـ`redacted`.

## أسئلة شائعة

### ماذا يعني Script error. في JavaScript؟

رمى سكربت من مصدر آخر خطأ، وأخفى المتصفح التفاصيل عن الصفحة لأن الملف لم يُحمّل عبر CORS. السكربت نفسه عمل.

### لماذا يأتي Script error. بالسطر 0 وبلا مكدّس؟

يستبدل معيار HTML الرسالة والملف والسطر والعمود وكائن الخطأ عندما يكتم خطأ. ولا يبقى إلا النص `Script error.`.

### هل يعني Script error. أن السكربت فشل في التحميل؟

لا. السكربت الذي يفشل في التحميل يطلق الحدث `error` على عنصره `script` ولا يعمل أبدًا. أما `Script error.` فيعني أن السكربت عمل ورمى خطأ.

### هل أستطيع رؤية الرسالة دون تغيير الخادم؟

في وحدة تحكم المتصفح، نعم. في تتبع الأخطاء لديك، لا. تحتاج الصفحة إلى `crossorigin` على الوسم وترويسة CORS من الخادم، أو إلى السكربت على مصدرك أنت.

### هل أستبعد Script error. من تتبع الأخطاء؟

عدّه بدلًا من ذلك. يخبرك الرقم بعدد الأخطاء التي لا تستطيع رؤيتها، وينخفض إلى 0 متى حُمّل كل سكربت من مصدر آخر عبر CORS.

## عدّ الأخطاء التي لا تستطيع رؤيتها بعد

يحتفظ SDK المتصفح من LogBrew بكل خطأ مكتوم في 1 مشكلة، ويعطي كل خطأ حقيقي ملفه وسطره ومكدّسه. ابدأ بخطة مجانية سخية دون بطاقة.

[ابدأ مجانًا](https://logbrew.co/ar)

## المصادر

- [MDN, Window: error event](https://developer.mozilla.org/en-US/docs/Web/API/Window/error_event)
- [MDN, crossorigin attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/crossorigin)
- [HTML Standard, Runtime script errors](https://html.spec.whatwg.org/multipage/webappapis.html#runtime-script-errors)
- [whatwg/html#2440](https://github.com/whatwg/html/issues/2440)
- [whatwg/html#10514](https://github.com/whatwg/html/issues/10514)

## المزيد من حلول أخطاء JavaScript

- [أصلح خطأ Failed to fetch وميّز بين أسبابه الـ3](https://logbrew.co/ar/errors/failed-to-fetch)
- [أخطاء JavaScript أعدنا إنتاجها، وكيف تصلح كلًا منها](https://logbrew.co/ar/errors)
