2016-05-12 5 views
0

私は使用しているサイトから特定のページのiframeを持っていますが、そのページのすべての部分をiframeで表示したくありません。特に、ページにはiframeに入れたくないナビゲーションサイドバーがあります。私は下のjavascriptでこれを達成しようとしていますが、私はそれを理解できません。iframeからIDを削除する

<iframe width="800" height="800" src="scores/new?site_id=193"> 

<script> 
    var element = document.getElementById("sidebar-wrapper"); 
    element.parentNode.removeChild(element); 
</script> 

</iframe> 
+0

はから 'iframe'です同じドメインですか? –

+0

ええ、今はすべてが私のマシンのローカルです。私はまだ – Spance

答えて

2

あなたは、これはあなたのニーズに合うことができ

//inside the iframed page 
    var iframe = (function() { 
     try { 
      return window.self !== window.top; 
     } catch (e) { 
      return true; 
     } 
    })(); 

    if(iframe === true) { 
    var element = document.getElementById("sidebar-wrapper"); 
    element.parentNode.removeChild(element); 
    } 

希望iframeをページにコントロールを挿入することができます。

+1

@Spanceこれは本当に便利です2つのサイト/ドメインの間に何らかの種類の接続を必要としないためです。 –

3

セキュリティ上の理由から、iframeでjavascriptを実行することはできません。同じドメインにいる場合はいくつかの例外がありますが、ほとんどの場合はそれを避けるべきです。

iframeがあなたがコントロールできるサイトでない場合は、あなたができることはほとんどありません。他のサイトを管理していて、それが別のドメインの場合は、postMessageの機能で作業することができます。

編集:Mozillaはここhttps://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

あなたがメッセージを処理し、あなたのサイドバーを隠す内側にリスナーを作成する必要があると思いを持っているドキュメントをチェックしてください。その後、親機でiframeにメッセージを送信して、その機能を起動します。

親:

var iframe = document.getElementById('#iframeID'); 
iframe.contentWindow.postMessage('iframeTrigger'); 

インラインフレーム:

window.addEventListener('iframeTrigger', hideSidebar); 

function hideSidebar() { 
    //do stuff 
} 
+0

のiframeが来ているサイトをテストしています。私が所有し、自分自身で書いたアプリケーションです – Spance

+0

これもまたこの素晴らしい記事ですhttps://davidwalsh.name/window-iframe – Rahul

0

これは理論的には機能し、consoleで機能します。しかし、セキュリティ上の理由から、これはHTMLでは動作しませんが、同じドメインから試しています。私はちょうど私の見解を伝えたかったと私はこれを試してみました:

<iframe src="http://output.jsbin.com/figujeyiyo" frameborder="0" id="ifrm"> 
    Sorry, iframes not supported. 
</iframe> 
<script> 
    console.log(document.getElementById("ifrm").contentDocument.documentElement.getElementsByTagName("div")); 
    e = document.getElementById("ifrm").contentDocument.documentElement.getElementsByTagName("div")[0]; 
    console.log(e); 
    e.parentNode.removeChild(element); 
</script> 
0

あなたは、ページのロード時にコードを実行する必要があり、このようにあなたはそれを行うことができます。

document.addEventListener('DOMContentLoaded', function() { 
    var element = document.getElementById("sidebar-wrapper"); 
    element.parentNode.removeChild(element); 
    }); 
+0

これは親フレームからは実行できません。 –

関連する問題