---
title: "メッセージ、ファイル、行を隠す Script error を解決する"
description: "0 行目でスタックもない Script error. は、別のオリジンのスクリプトで起きたエラーをブラウザーが隠したという意味です。crossorigin と CORS ヘッダーを追加すると、メッセージが戻ります。"
canonical: "https://logbrew.co/ja/errors/script-error"
last_updated: "2026-11-10"
---

# メッセージ、ファイル、行を隠す Script error を解決する

0 行目でスタックもない `Script error.` は、別のオリジンのスクリプトで起きたエラーをブラウザーが隠したという意味です。`crossorigin` と CORS ヘッダーを追加すると、メッセージが戻ります。

2026年11月10日 に Chromium 152、@logbrew/browser 0.1.21、@logbrew/sdk 0.1.44 で検証

執筆 [Furkan Erday](https://github.com/furkanerday). Furkan Erday は LogBrew の創業者です。毎日 Claude Code と Codex を使って LogBrew を開発しています。

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

## エラーをスローしたスクリプトについて、ページが受け取る情報

| スクリプトの読み込み方法 | スクリプトの実行 | エラーの詳細 |
| --- | --- | --- |
| ページと同じオリジンから | 実行された | 完全 |
| 別のオリジンから | 実行された | `Script error.` |
| 別のオリジン、`crossorigin` と CORS ヘッダーあり | 実行された | 完全 |
| 別のオリジン、`crossorigin` ありでヘッダーなし | ブロックされた | なし |

1 つのスクリプトを 4 通りの方法で読み込みました。「完全」は、`window` の `error` イベントから読み取ったメッセージ、ファイル、1 行目、7 列目、スタックのことです。

## 完全なエラーを取り戻す

### 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.` には修正の手がかりがありません。1 件ごとに、別のオリジンのスクリプトがエラーをスローしたことを示します。`crossorigin` のないタグを探し、すべてのページで読み込まれるものから確認してください。

### 本来のメッセージをコンソールで読む

ブラウザーは、リスナーに対してはミュートしたエラーでも、コンソールには完全なエラーを出力します。テストでは、`window.onerror` が `Script error.` を受け取る一方で、コンソールには `Uncaught Error: Keg is empty` が表示されました。

### サードパーティのタグをどうするか決める

CORS ヘッダーのないチャットウィジェットや解析タグには、2 つの選択肢があります。そのままにしてミュートされたエラーを受け入れるか、`crossorigin` を付けて、ヘッダーがない場合はタグをブロックし、読み込み失敗として表示させるかです。

## 実際に試して確認したこと

エラーをスローする 1 つのスクリプト `throw new Error("Keg is empty: no beer left for order 42");` を、2 台のローカルサーバーに置きました。ページは `http://127.0.0.1:4873` で、`@logbrew/browser` 0.1.21 を入れた Chromium 152 で動かし、`http://127.0.0.1:4874` の 2 台目のサーバーを CDN の代わりにしました。スクリプトを 4 通りの方法で読み込み、そのたびに `window` の `error` イベントを読み取りました。

ページと同じオリジンからの場合、イベントには `Uncaught Error: Keg is empty: no beer left for order 42`、ファイル `/throws.js`、1 行目、7 列目、スタック付きの `Error` オブジェクトが含まれていました。`crossorigin` なしで別のオリジンから読み込んだ場合、イベントには `Script error.`、空のファイル名、0 行目、0 列目が含まれ、`Error` オブジェクトはありませんでした。それでもコンソールには完全なメッセージが出力されました。

CDN 側に `crossorigin="anonymous"` と `Access-Control-Allow-Origin: *` を付けると、イベントには再び完全な詳細が含まれました。属性だけ付けてヘッダーがない場合、ブラウザーはファイルをブロックし、スクリプトは実行されず、`script` 要素が `error` イベントを発火しました。

## ブラウザーがメッセージを隠す理由

HTML 仕様は、ページが CORS なしで別のオリジンから取得したスクリプトのエラーをミュートします。そのアルゴリズムは、レスポンスが CORS-cross-origin だった場合にエラーをミュート扱いにし、URL なし、0 行目、0 列目、エラーオブジェクトなしの `Script error.` として報告します。

ブラウザーは、クロスオリジンのスクリプトのエラーテキストをそのスクリプトのデータとして扱うため、ページには何も渡りません。MDN の `crossorigin` のページも同じことを 1 行で述べています。そうしたスクリプトでは、`window.onerror` を通じたエラーログへのアクセスが制限されます。

whatwg/html#2440 では、CORS なしで詳細を得る方法が求められました。この報告は 2024年7月に閉じられ、同じ日に whatwg/html#10514 が開かれて、ブラウザーごとに同じケースのミュートの仕方が違うと報告されました。その報告は今も開いたままです。

## LogBrew が記録する内容

完全な詳細がある場合、ブラウザー SDK は `Browser error: Error` という名前の問題を 1 件送信しました。`/throws.js` の 1 行目、7 列目のスタックフレーム、ソースのパス、グループ化キー `browser.error:Error:/throws.js` が付いています。エラーをスローするスクリプトごとに、別々の問題になります。

ミュートされたエラーの場合、問題の名前は同じで、スタックフレームはなく、0 行目、0 列目、グループ化キーは `browser.error:Error` でした。ミュートされたエラーはこの 1 件の問題にまとまるので、その件数を見れば、まだ見えていないエラーがいくつあるか分かります。

どちらのイベントにも、ページのパス、`macOS` 上の `Chromium 152` というランタイム、`page_view` のブレッドクラムが含まれていました。メッセージのテキストはどちらにも含まれず、SDK は `redacted` と記録しました。

## よくある質問

### JavaScript の Script error. とはどういう意味ですか？

別のオリジンのスクリプトがエラーをスローし、ファイルが CORS 付きで読み込まれていなかったため、ブラウザーが詳細をページから隠したという意味です。スクリプト自体は実行されています。

### Script error. が 0 行目でスタックもないのはなぜですか？

HTML 仕様は、エラーをミュートするときにメッセージ、ファイル、行、列、エラーオブジェクトを置き換えます。残るのは `Script error.` という文字列だけです。

### Script error. はスクリプトの読み込み失敗という意味ですか？

いいえ。読み込みに失敗したスクリプトは、`script` 要素で `error` イベントを発火し、実行されません。`Script error.` は、スクリプトが実行されてエラーをスローしたという意味です。

### サーバーを変えずにメッセージを見られますか？

ブラウザーのコンソールでは見られます。エラー監視では見られません。タグに `crossorigin` を付けてサーバーから CORS ヘッダーを送るか、スクリプトを自分のオリジンに置く必要があります。

### エラー監視から Script error. を除外すべきですか？

除外せずに数えてください。その数は、見えていないエラーの数を示します。クロスオリジンのスクリプトがすべて CORS 付きで読み込まれれば、0 になります。

## まだ見えていないエラーを数える

LogBrew のブラウザー SDK は、ミュートされたエラーをすべて 1 件の問題にまとめ、本来のエラーにはそれぞれファイル、行、スタックを付けます。余裕のある無料プランで始められます。クレジットカードは不要です。

[無料で始める](https://logbrew.co/ja)

## 出典

- [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/ja/errors/failed-to-fetch)
- [再現した JavaScript エラーとそれぞれの解決方法](https://logbrew.co/ja/errors)
