intime o'

手前に何かを軽蔑する権利なんかあるもんか(阿佐田哲也著「麻雀放浪記(一)」より)
フレームページでのGreaseMonkey - JavaScript 2011/09/28(Wed.)
 分かったコトと疑問点。

グリモンなんてすごく使われてるし、ググれば情報が一杯あると
思ったんだけど、ググり方が悪かったのか見つかんなかった。
見つかったら恥ずかしいからこんなページ消すこと。

私が試したのは
<frameset>
  <frame src="A" name="a">
  <frameset name="main">
    <frame src="B" name="b">
    <frame src="C" name="c">
  </frameset>
</frameset>
という感じの作りのページ。このページ自体をXとする。
名付ける必要は結果的に無かったけれど。
Xの中には、A,B,CというXとは別なwebページを表示させてるけど
全て同じドメインである。
そのドメイン下のページ全てで、実行させるようなグリモンを書いた。

後で問題になったので、A,B,Cそれぞれにおいてもグリモンが発動してる
のか気になったので、
console.log(document);
というコードをグリモンに追加した。
その結果、AとBのみで実行した。何でCで実行されないのかな。分かんない。

元の目的としては、今はAの中で<form>を弄りたかったのと、
JavaScriptをちょっと弄りたかった。document.urlをチェックするなり
して、Aの中でのみ発動させる。
Aで定義されているグローバルな変数、関数にはアクセスできなかった。
"hogehoge is undefined"というエラーが吐かれた。

んで偶然見つけたのが、今まで裸で書いてたコードをsetTimeoutで実行
させること。setTimeout("code string",time)で実行される
"code string"のwindowは裸でcode stringと書いた場合と
違うらしいのだ。そこらへんもちゃんと勉強しておくべきだった!

---
逆に今まではグリモンはXにおいてのみに発動されてるものだとばっかり
思ってて、name="a"のAで発動させたかったので
window.a.document.Form.xxx
ってやってた。だから、こう
setTimeout("document.Form.xxx",500)
500ってのは適当。

グリモンで自分ごのみに修正するの楽しい。 

コメ(0) | トラ(0)