2009-03-11 8 views
2

IFrameでjavascript:parent.location.hrefを使用して親ウィンドウを変更すると、IEはIFrameコンテンツを短時間変更して、親が変更しているURLに。 Firefox、Chrome、Operaは親ウィンドウを変更するだけです。親ウィンドウを変更するときにIEがIFrameにURLを表示しないようにする方法

IFrameでIFrameを表示せずに親を変更する方法はありますか?

[編集]ここ

は、それを複製するためのサンプルコードです。

インラインフレームページ:

<iframe id="finder" name="finder" src="content.html" scrolling="no" height="620" width="620" style="border:1px #c0c0c0 solid;"></iframe> 

コンテンツページ:

<a href='javascript:parent.location.href="http://www.google.com"'>test link</a> 
+0

IE7はこれをしていないようです。いくつかのコードを投稿できますか? –

+0

URLは正確にどこに表示されていますか? –

+0

IFrameのコンテンツは、最終的に親が変更されるURLを示すテキストに置き換えられています。 – Mike

答えて

7

あなたが式を評価するのではなく、メソッドを呼び出しているため、これが発生します。

parent.location.href = "http://www.google.com"; 

我々は、明示的な機能に移動した場合、我々はもはや行動を見ていない:

<a href="javascript:void(parent.location.href = 'http://www.google.com')">test link</a> 

しかし、もちろん、この特定のケースのためのJSを使用する理由はありません。

<a href="http://www.google.com/" target="_parent">test link</a> 

もしそれがあったとしても、私たちはまだ正常に機能低下するはずです。

<a href="http://www.google.com/" target="_parent">test link</a> 

<script type="text/javascript"> 
    var links = document.getElementsByTagName('a'); 
    for(var i=0;i<links.length;i++) { 
     if(links[i].target == '_parent') { 
      links[i].onclick = handleParentClick; 
     } 
    } 

    function handleParentClick(e) { 
     var sender = e ? (e.target || e) : window.event.srcElement; 
     parent.location.href = sender.href; 
     return false; 
    } 
</script> 
4

あなたがこのように変更した場合は、JavaScriptのインラインを残すことができます:通常

<a href='javascript:void(parent.location.href="http://www.google.com")'>test link</a> 

を表現はまた、式の右辺を返す「設定」。 IEは式の戻り値をとり、それを表示します。その周りに "void()"を置くことで、IEはそれを表示しないように戻り値を削除します。

+1

これは問題を最も正確に記述します - "javascript:anything-non-null"は結果を文字列で表示します。 Rexのターゲット属性に関するアドバイスは、実際の方法ですが、トップのヒント:javascriptを使用することは決してありません。 – bobince

+0

+1これは正解でなければなりません。Rex Mの解は、実際の問題を理解していることを示していません。しかし、javascriptを使用する場合は、javascriptを使用する理由はありません.href属性で、onclickハンドラを設定するだけで、非侵入型にすることもできます。 –

関連する問題