2009-08-03 8 views
1

JavaScriptを使用して小さなiframeアプリケーションを作成していて、誰かがiframe内のリンクをクリックしたときに作成したURLバーのURLを更新する方法を見つけられないようです。iframeが新しいURLにあるときを伝える

瞬間的に、また、好ましくは、document.getElementById( 'idofiframe')。srcの値が変更されたかどうかをミリ秒ごとにチェックする必要はありません。

URLが変更されたときに通知するための単純なプロパティが見つからないようです。そうでない場合、これをプログラムで解決すると同様に機能します。

ありがとうございました!

答えて

0

代わりに、フレームのコンテンツにコードを追加して、コンテナーフレームにイベントを発生させることはできますか?

IEでは、 "OnReadyStateChanged"イベントが必要なものを提供する可能性があります。

+0

のiframeコンテンツはおそらく自分のものではないでしょう。まったく。実際、その開始ページはgoogleです。しかし、提案をありがとう! – Cyclone

1

これはxssとみなされ、ほとんどのブラウザがそれをブロックするため、これは難しいでしょう。

AJAXに関するいくつかの回避策があります。

1

まず、iframeのソースが親ウィンドウと同じドメインを指している場合にのみ、やりたいことができます。したがって、iframeがiframeed.htmlというiframeを持つページpage.htmlを持っている場合、両方とも同じドメインに存在しなければなりません(例:www.example.com/page.htmlおよびwww.example.com/iframed.html)その場合は、あなたがiframed.htmlページで次の操作を行うことができます

<script type="text/javascript"> 
window.onload = function() { 
    var links = document.getElementsByTagName('a'); 
    for (var i=0, link; link = links[i]; i++) { 
     link.onclick = function() { 
      window.parent.location.href = '#' + encodeURIComponent(this.href); 
     } 
    } 
} 
</script> 

このそれはあなたがiframed.htmlでリンクをクリックすると、URLバーがするようになりますリンクのURLをURLの「ハッシュタグ」に入れてください(例:www.example.com/page.html#http%3A%2F%2Fwww.example.com%2FanotherPage.html)

明らかに、あなたはこのようなスクリプトが必要ですiframe内に表示されるすべてのページ。

これが配置されると、その後、あなたがpage.htmlの内側にこのスニペットを置くことができ、そしてそれはIFRAMEを自動的にハッシュタグでURLを読み込むようになります:私は残念ながら実行していない

window.onload = function() { 
    var url = window.location.hash.substr(1); 
    if (url) { 
     document.getElementById('iframe').src = url; 
    } 
} 

これをテストするためのコードですが、それはかなり簡単ですし、そのアイデアを説明する必要があります。それがどうなるか教えてください!

あなたはインラインフレームにonloadイベントを追加し、それを監視することができ
+0

これは非常に素晴らしい解決策ですが、残念ながらiframe内のウェブサイトのオーナーではないため、このコードを配置することはできません。ウィンドウの場所を調べようとしたが、それが自分のサイトではなかった場合、それはXSSと見なされ、解決策にはなりません。 ご協力ありがとうございます!これがどうやって起こったのかを知らせてください。 – Cyclone

+0

iframeのsrc属性を見ることはできますが、iframeのcontentWindowにアクセスすることはできません。 iframeウィンドウがナビゲートすると、そのcontentWindow.locationは更新されますが、iframe要素のsrcは同じままです。 1つの方法がありますが、iframeされたページをcooporateする必要があります。ドメインのページのiframeを開いて、独自のURLを渡すことができます。同様の手法がhttp://oframebust.com/によって使用されています –

+0

PHPのCURLまたはSimpleHTMLDomを使用する解決策は、 – 131

1

- フレームの読み込みが完了するたびに、それがスローされます(もちろん、それは再び同じURL可能性があり、しかし...)

+0

です。これを最初に試してみます。ありがとう!同じURLの場合は、まったく問題ありません。 – Cyclone

関連する問題