<script language="JavaScript">
<!--
function SymError()
{
return true;
}
window.onerror = SymError;
var SymRealWinOpen = window.open;
function SymWinOpen(url, name, attributes)
{
return (new Object());
}
window.open = SymWinOpen;
//-->
</script>
このスクリプトのSymErrorという関数で
return trueと書いてありますがこれはなんでしょうか?
返り値だったら()がつくはずですしそもそもこの関数には引数がないです。
それとwindow.openには()がつかないのでしょうか?(windows.open()のように)
次のSymWinopenという関数の返り値にnew Object()がありますがこれもなんでしょうか?
新しいオブジェクトというのはわかるのですが実際何をしてるのかわからなくて。
最後にwindow.open = SymWinOpenこれはSymWinOpenという名のウィンドウを
開くということでしょうか?でもopenメソッドは○=window.open()という形を
取るはずなのに逆なのが疑問です。
たくさん質問をして恐縮ですがわかるのだけでいいですのでご教授していただけたらうれしいです。
ちなみにここのHPのソースです。
http://www.oscarcreation.com/japanese/
No.1ベストアンサー
- 回答日時:
onerrorとか
onclickとか
そういう状況に応じて生じるものをイベントといいます。
また、その時呼び出されるプログラムをイベントハンドラとかいいます。
window.onerror=SysError;
は、windowで生じたonerrorイベント時SysError関数を呼び出すことを登録していると思ってください。
それで、onerrorイベントが生じた時にSysError関数が呼び出されるわけですが、こうしたイベントハンドラ(イベント処理プログラム)での決まり事として、
return false;
すると、このイベント自体が起こらなかったこと(無効)に
また、
return true;
とすると、正常にこのイベントが処理できたということ(有効)にする
ということになっています。
また、
>返り値だったら()がつくはず
は、勘違いです。
return (ret);
などと書かれることも多いですが、
もともとreturn文にはカッコを必要としません。
なので、
return true;
return (true);
は同じです。
window.open = SymWinOpen;
では、本来
window.openに新しくウインドウをオープンする関数が割り当てられていますが、
それを、自前の物(関数)に置き換えています。
つまりwindow.open(…);を使うと(この設定以降)SymWinOpen(…)が呼び出されることになりまs。
置き換えてしまうともともとの関数が呼び出せなくなるので
var SymRealWinOpen = window.open;
のようにして元々の関数を取っておいてあります
なので、
SymRealWinOpen(…);
は、もともとのwindow.openと同じものとして使うことができます。
>SymWinopenという関数の返り値にnew Object()がありますがこれもなんでしょうか?
これは、新しいオブジェクトを作りそれを返すということで、この返値を使ってもそのままでは何も使えません。
なので、window.open(…)をしたときの動作を無効にするというような意味あいだと思います。
ご回答ありがとうございます
return についてよくわかりました
またwindow.open = SymWinOpen;について関数を置き換えることが
できるというのは目からうろこです。
そんなこと(メソッドの内容を置き換えることができる)ができるんですね
勉強になります。
それと最後のnew Object()についてですがなんとなく意味はわかりますが
なぜオブジェクトなのかが疑問です。null値の変数じゃなだめなのでしょうか?
私自身あまりオブジェクトについて理解がないもので・・・。
でもこのスクリプトが何をしているのがわかりました。
イベントハンドラの場合はreturn falseをつかってメソッドのときは
空のオブジェクトを入れて無効にするんですね。
詳しい解説ありがとうございました^^
No.3
- 回答日時:
>なぜオブジェクトなのかが疑問です。
null値の変数じゃなだめなのでしょうか?どちらでもいいように思われます。
ポップアップブロッカーの場合はwindow.open()の返り値がnullのものが多いようですので。
No.2
- 回答日時:
ちなみにそのスクリプトはノートン先生の仕業です。
実際にそのページのソースに記述されているわけではなく、
そのページを読み込んだ際にポップアップを防ぐ目的で勝手に挿入されるものです。
window.onerror = SymError;はウィンドウが開いていることを前提としたスクリプトを実行した際のエラーを防ぐ目的、
またreturn (new Object());は、window.open()の返り値がオブジェクトである事に対する配慮だろうと思います。
ご回答ありがとうございます
なるほどノートン先生の仕業だったんですね。
ポップアップを防ぐ目的で自動的に入ってたとはおどろきです。
ソースに直接影響してるとは思いもしませんでした。
>return (new Object());は、window.open()の返り値がオブジェクトである事>に対する配慮だろうと思います。
ウィンドウ名、URLなどはオブジェクトなんですか。よく考えてみれば
変数とは微妙に違いますね
#最後に道理でどこのHPのソース見てもこれがあるわけだ(^^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript JAVASCRIPT 2 2022/04/15 15:10
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript 正規表現について質問です。条件に合う場合はtrueを返したい 3 2022/10/06 23:02
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- オープンソース Coinmarketcap api 1 2022/05/30 15:47
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- 英語 会話で両者認識している名詞にも関わらず不定冠詞を付ける用法について 7 2023/06/16 14:50
- JavaScript JavaScriptの即時関数の書き方 1 2022/11/29 09:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同じページをブラウザで複数開...
-
画面を閉じる(×ボタンやタスク...
-
[Java] Edgeでのアドレスバー非...
-
子画面を自動で閉じた後、親画...
-
親画面に値を戻しテキストエリ...
-
ツールバーやステータスバーな...
-
子画面へデータを渡したい!
-
「処理中」表示
-
window.open("about:blank")
-
opener.focus();が利かない
-
JavaScriptでアンカータグが上...
-
window.openで子画面を開いた後...
-
サブウィンドウを常に最前面に...
-
WEBアプリを作成しています。
-
マイページはどこを開くの
-
ウインドウを毎回同じ位置、大...
-
エクセルのシート上に別のシー...
-
デジタル時計の時刻合わせの方...
-
エクセルVBAでフォームのListbo...
-
Javascript_submit()完了後に処...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
[Java] Edgeでのアドレスバー非...
-
同じページをブラウザで複数開...
-
window.open("about:blank")
-
ブラウザ Chromeを使っていて、...
-
画面を閉じる(×ボタンやタスク...
-
子画面を自動で閉じた後、親画...
-
onclickでのページ内移動
-
親ウインドのASPをリロードさせ...
-
サブウィンドウを常に最前面に...
-
opener.focus();が利かない
-
window.closedについて
-
alertの最前面表示
-
MM_openBrWindowとwindow.open
-
ツールバーやステータスバーな...
-
window.openで子画面を開いた後...
-
リンククリックでウインドウの...
-
Request.Params("xxx")で「+」...
-
呼び出されたページを閉じ、呼...
-
window.open()で幅指定の際、ウ...
-
子画面へデータを渡したい!
おすすめ情報