人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Greasemonkeyで、すべてのページのbodyタグのすぐ後ろにタグを挿入するスクリプトを書いたのですが、FRAMEやIFRAMEが使われているページではフレーム内のbodyにも適用されてしまいます。一番外のフレームにだけ適用させる方法はあるのでしょうか?
具体的なコードはこちらです。
http://blog61.fc2.com/w/worris/file/hbmview.user.js
Javascriptのwindow.top.documentでは駄目なようですね。

●質問者: worris
●カテゴリ:コンピュータ インターネット
✍キーワード:BODY Greasemonkey JavaScript TOP コード
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kidd-number5
●20ポイント

http://f32.aaa.livedoor.jp/~azusa/index.php?t=js&p=28#8

親フレームの場合はparentプロパティ、フレームトップの場合はtopプロパティ、現在のフレームの場合はselfプロパティを使用します。 

これを使えば、現在自分がtopなのか、などが判断できるようになります。

IFRAMEの場合、親フレームを置き換えでいいと思いますが、

FRAMEの場合は最上位の親フレームのbodyはnoscript用になってしまうと思うので、あまり意味はないかもしれませんが。


2 ● kidd-number5
●20ポイント

ごめんなさい、topは試されているのですね。parentで再帰的にってのも試してみてはどうでしょうか?と思って書いたつもりだったのですが、topの方で、と答えた書き方になってしまいました。

http://espion.just-size.jp/archives/06/094171639.html

ではtopで処理がうまくいっているようなのですけどね・・・

◎質問者からの返答

top.document.location.hrefで取得されるのは、親フレームの場合も子フレームの場合も一番外のフレームのURLなのです。

しかしtop.document.evaluate("//body", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;を子フレームに対して行う時には、子フレームのbodyが取得されているようなのです。(という推測をしています。)


3 ● ardarim
●40ポイント

GreaseMonkeyは使ったことがないので(というかFireFox使っていないので)的外れだったらすみません。

問題の処理は、GM_xmlhttpRequest()の引数として渡した関数の中で実行されますが、GreaseMonkeyがonload関数を呼び出す際のDOM空間がページ全体ではない(フレーム単位?)のではないでしょうか?

GM_xmlhttpRequest()で取得した結果を一旦変数などに保存して、GM_xmlhttpRequest()を抜けた後で挿入処理をしてみてはどうでしょうか。

こんな感じでしょうか。

function showhatena() {
 var uri=escape(top.document.location.href);
 var spl_link = null;
 GM_xmlhttpRequest({
 ... 省略
 onload:function(response) {
 if(...){
 ... 省略
 spl_link = document.createElement('iframe');
 ... 省略
 }
 }
 });
 if(spl_link){
 var header = top.document.evaluate(...);
 header.parentNode.insertBefore(spl_link, header.nextSibling);
 }
}

フレームごとに同じ処理が呼ばれているともしかしたらダブって挿入されるかもしれません。その場合は挿入するエレメントに名前をつけてダブらないようにチェックしたほうが良いと思います。

◎質問者からの返答

なぜかうまく行きません。

spl_linkがnullのままになるようです。

GM_xmlhttpRequestは読み込みが終わるのを待たないのでしょうか?(そのためにonload: で読み込み完了後の処理を記述する?)

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ