5月 072007
 

JavaScriptで子から親を変更(したように見せる)というのをやったので、メモ。
そして、このメモは某アレ用に書いたのを流用したので、ちょっと丁寧w

今回のポイントは

  • ID指定
  • getElementById

の二つ。


まずは親のソース

<p id=”change”>このテキストを変更する</p>

変更したいところにはidで”change”とふってあります。つまり、親要素はIDを指定するだけ。

次に子のソース

<script type=”text/javascript”>
function change(){
window.opener.document.getElementById(“change”).innerHTML=”テキストが変わった!”;
}
</script>

<input type=”button” value=”親ウィンドウの値を変える” onclick=”change();” />

headタグ内にscriptタグでJavaScriptのユーザー定義関数として”change()”、bodyにはそのスクリプト”change()”をonclickで実行するbuttonを配置してあります。

ソース自体は非常にシンプルです。

では、JavaScriptのchange()の中を見てみましょう。

このJavaScriptの中も非常にシンプル

window.opener.document.getElementById(“change”).innerHTML=”テキストが変わった!”;

日本語に訳してみると、

(この)ウィンドウ.を開いたウィンドウ.の記述内容.のID(“change”)を取得して.そのHTMLの中身を”テキストが変わった!”で上書きしなさい

という意味、一応記述通りに.も入れてみましたが、document.getElementByID(string)で、記述されているHTMLの
ID属性のstringというIDを抽出するという感じです、で、その後ろのinnerHTMLこれはイメージとしては、取得したID属性のついているタ
グの中身という感じでしょうか。このサンプルの場合は、

<p id=”change”>このテキストを変更する</p>

pタグのid属性に”change”とついているので、innerHTMLは”このテキストを変更する”という部分になります。で、これをinnerHTML=”テキストが変わった!”で代入、つまり、上書きするという感じ。

getElementByIDのところをタグにしたりしても、おもしろいかもしれない。ちなみに、innerHTMLにはいろいろと制限があるっぽい。

あと、バスキュールさんちはこれをうまいこと使って、プラグインチェッカーと併せて、プラグインがない場合はそのままのHTMLを表示、ある場合はIDをごっそり上書きしてFlashを表示するという感じ。

だから、ソースをみてもHTMLが書いてあるだけで、Flashのタグが表示されない。さらに動的なコンテンツ(JavaScriptではないっぽいし、PHPでもないから、手作業で更新かもしれない@バスキュールさんち)でも同じようにできるし、JavaScriptで見た目上を変化させているだけであって、ソースが変化するわけではないので、サーチエンジンのクローラーはHTMLをみるという感じ。実は便利
クール

ツイートツイート

Related posts:

  1. 別のWindowにPOSTを渡すのだ!
  2. headerパワー恐るべし。
  3. PHPのユーザー定義関数で複数の戻り値がほしいんだ!
  4. Flash謎のおまじない
  5. 今日のお勉強

 Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>