[解決済み】ChromeとFirefoxのJavascriptで「Script Error.
質問
私のウェブサイトでJavascriptのエラーを検出し、報告のためにバックエンドに送信するスクリプトがあります。このスクリプトは、最初に発生したエラー、想定される行番号、および時間を報告します。
doctypeを含むようにEDITしてください。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:fb="http://www.facebook.com/2008/fbml">
...
<script type="text/javascript">
//<![CDATA[
// for debugging javascript!
(function(window){
window.onerror = function(msg, url, ln) {
//transform errors
if (typeof(msg) === 'object' && msg.srcElement && msg.target) {
if(msg.srcElement == '[object HTMLScriptElement]' && msg.target == '[object HTMLScriptElement]'){
msg = 'Error loading script';
}else{
msg = 'Event Error - target:' + msg.target + ' srcElement:' + msg.srcElement;
}
}
msg = msg.toString();
//ignore errors
if(msg.indexOf("Location.toString") > -1){
return;
}
if(msg.indexOf("Error loading script") > -1){
return;
}
//report errors
window.onerror = function(){};
(new Image()).src = "/jserror.php?msg=" + encodeURIComponent(msg) + "&url=" + encodeURIComponent(url || document.location.toString().replace(/#.*$/, "")) + "&ln=" + parseInt(ln || 0) + "&r=" + (+new Date());
};
})(window);
//]]>
</script>
このスクリプトのおかげで、私のサイトで起きているあらゆるjavascriptのエラーを痛感しています。 その中でも、0行目の"Script Error."は大きな問題です。 は、Chrome 10+、Firefox 3+で表示されます。Internet Explorerではこのエラーは存在しない(あるいは別の呼び方をしているかも?
訂正(2013/5/23)。 この "Script Error, Line 0" のエラーは、現在 IE7 およびおそらく他のバージョンの IE で表示されます。以前はこのような動作はなかったため、最近のIEのセキュリティパッチによるものと思われます。
このエラーの意味や原因に心当たりのある方はいらっしゃいますか?私のページロード全体の約0.25%で発生し、報告されたエラーの半分を占めています。
解決方法は?
Firefox、Safari、Chromeでスクリプトエラーが発生するのは、ブラウザの設定に違反する例外が発生した場合です。 セイムオリジンポリシー - つまり、現在のページのドメインとは別のドメインでホストされているスクリプトでエラーが発生した場合です。
この動作は、スクリプトから外部ドメインへの情報漏えいを防ぐために意図的に行っています。 この動作が必要な例として、誤って
evilsite.com
を含むページを提供し、そのページが
<script src="yourbank.com/index.html">
. (そう、scriptタグはJSではなくhtmlに指しているのです)。 この場合、スクリプト・エラーが発生しますが、このエラーは、あなたがログインしているかどうかを教えてくれるので、興味深いものです。 ログインしている場合、エラーは次のようになります。
'Welcome Fred...' is undefined
一方、そうでない場合は、次のようになります。
'Please Login ...' is undefined
. そんな感じです。
もしevilsite.comが上位20ほどの銀行機関についてこれを行えば、あなたがどの銀行のサイトを訪れるかについてかなり良い考えを持つことができ、より的を射たフィッシングページを提供できるようになるでしょう。(もちろん、これは一例に過ぎない。 しかし、これは、なぜブラウザが 任意の のデータがドメインの境界を越えてしまうのです)。
最新版のSafari、Chrome、Firefoxでテストしたところ、すべてこのように動作しました。 IE9では、x-originの例外をsame-originの例外と同じように扱います。 (Operaはonerrorをサポートしていません)。
馬の口より オリジンをチェックするWebKitのソース で、onerror() に例外を渡すとき。 そして、その をチェックするFirefoxのソース。 .
アップデート (2011/10/21) : その この問題を追跡するFirefoxのバグ には、この動作のきっかけとなったブログ記事へのリンクが含まれています。
アップデート (12/2/14)
: を指定することで、一部のブラウザで完全なクロスドメインエラーレポートを有効にすることができるようになりました。
crossorigin
属性
をスクリプトタグに追加し、サーバーから適切な
CORS
HTTPレスポンスヘッダ
関連
-
[解決済み】コンソールがUnterminated JSX contentsエラーを投げる【終了しました
-
[解決済み】React-Routerの子が1つしかない。
-
[解決済み】Uncaught ReferenceError。Firebase は定義されていません。
-
[解決済み】 Uncaught Reference Error: stLight is not defined (in Chrome only)
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] Firefox または Chrome ブラウザから HTTP POST リクエストを手動で送信する方法
-
[解決済み] Safari、Chrome、IE、Firefox、Operaのブラウザを検出する方法は?
-
[解決済み] ChromeでコードからJavaScriptのブレークポイントを設定する方法は?
-
[解決済み】JavaScriptで2つの配列を結合し、項目の重複を排除する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】document.getElementByIDは関数ではありません。
-
[解決済み】Uncaught ReferenceError: angular is not defined - AngularJSが動作しない。
-
[解決済み】NodeJS "ESモジュールをロードするためにインポートを使用する必要があります。"
-
[解決済み】JavaScript "Uncaught TypeError: object is not a function" 連想性の質問
-
[解決済み】ある要素が可視DOMに存在するかどうかを確認するにはどうすればいいですか?
-
[解決済み] テスト
-
[解決済み】Kendo Observable Bindingと併用する場合、Kendo Switch Labelsを変更することは可能ですか?[Kendo-UI]です。
-
[解決済み】ES6マップオブジェクトをソートすることは可能ですか?
-
[解決済み】TypeError:res.jsonは関数ではありません。
-
[解決済み】Javascript、[オブジェクトHTMLInputElement]を表示中。]