web-dev-qa-db-ja.com

iframeからのポップアップをブロックする方法は?

終了ポップアップのあるページを埋め込んでいます。ページを閉じると、ポップアップウィンドウが自動的に起動します。

終了時にiframeからのポップアップを無効にする方法は?

15
Paul

ポップアップ広告のようなものや、IFRAMEに表示しているWebサイトからの何かをブロックしたい場合は、かなり簡単です。

Iframeが指すframefilter.phpおよびjavascriptfilter.phpを作成します。 onload blah blahなどのニーズに合わせて変更できます。しかし、現状のままで、かなり長い間問題なく動作しています。それが役に立てば幸い。

標準のIFRAMEHTMLを次のように置き換えます。

    <IFRAME SRC="http://www.yourdomainhere.com/framefilter.php?furl=http://www.domainname.com" WIDTH=1000 HEIGHT=500>
If you can see this, your browser doesn't 
understand IFRAMES. However, we'll still 
<A HREF="http://www.domainname.com">link</A> 
you to the page.
</IFRAME>

Framefilter.php

        <?php

//Get the raw html.
$furl=trim($_GET["furl"]);
$raw = file_get_contents($furl);

$mydomain="http://www.yourdomainhere.com/";

//Kill anoying popups.
$raw=str_replace("alert(","isNull(",$raw);
$raw=str_replace("window.open","isNull",$raw);
$raw=str_replace("Prompt(","isNull(",$raw);
$raw=str_replace("Confirm: (","isNull(",$raw);

//Modify the javascript links so they go though a filter.
$raw=str_replace("script type=\"text/javascript\" src=\"","script type=\"text/javascript\" src=\"".$mydomain."javascriptfilter.php?jurl=",$raw);
$raw=str_replace("script src=","script src=".$mydomain."javascriptfilter.php?jurl=",$raw);

//Or kill js files
//$raw=str_replace(".js",".off",$raw);

//Put in a base domain tag so images, flash and css are certain to work.
$replacethis="<head>";
$replacestring="<head><base href='".$furl."/'>";
$raw=str_replace($replacethis,$replacestring,$raw);

//Echo the website html to the iframe.
echo $raw;

?>

javascriptfilter.php

<?php

//Get the raw html.
$jurl=trim($_GET["jurl"]);
$raw = file_get_contents($jurl);

//Note, if trickyness like decode detected then display empty.
if(!preg_match("decode(", $raw)){

//Kill anoying popups.
$raw=str_replace("alert(","isNull(",$raw);
$raw=str_replace("window.open","isNull",$raw);
$raw=str_replace("Prompt(","isNull(",$raw);
$raw=str_replace("Confirm: (","isNull(",$raw);

//Echo the website html to the iframe.
echo $raw;

}

?>
8
Delusion

かなり古い質問ですが、これはグーグルで最高の結果なので、私は新しい解決策を提供すると思いました。

Iframeがウィンドウを開くのをブロックしたい場合は、iframeで新しいHTML5「サンドボックス」属性を使用できます。

https://developer.mozilla.org/en/docs/Web/HTML/Element/iframe

これにより、何も実行されなくなります(ページが正しく機能するために必要なJavaScriptの実行を除く)。

<iframe sandbox="allow-scripts" src="your/url/here"></iframe>
4
Sollace

IFrame要素にサンドボックス属性を設定すると機能するはずです。

2
SPagad

これは不可能だと思います。

  • まず(そして最も重要なことですが)、iframeが別のドメインにある場合、そのDOMを変更することはできません(onunloadハンドラーなど)。これが事実である場合、他の2つの問題は議論の余地があります。
  • 次に、できたとしても、何らかの方法でリスナーを削除する必要があります。リスナーがwindow.onunloadを介してロードされる場合、それは簡単です。そうでなければ、それほど多くはありません。
  • 第三に、長期的には、これは frame-busting-busters と同じ軍拡競争につながるでしょう。

私が見る唯一の可能性は、本質的に非技術的なものです。iframe内でそのサイトを運営している人に、そのようなonunloadポップアップのない特別なページを作成できるかどうかを確認してください。ほとんどの場合、どちらか

  • a)特別な手配をすることができます(常に無料ではありませんが)、または
  • b)機能を削除すると、ToSに違反します。その場合、ポップアップなしで同様の機能を提供する他の誰かを探す必要があります(実際には、ほとんどのサービスには複数のプロバイダーがあります)
1
Piskvor

実際、これはis可能です。少なくとも多くの場合。多くの場合、iframe内のコードは、ポップアップを開くためにtop.window.open(...)のようなものを実行します。 window.openメソッドを再定義して、まだ存在しているが、ウィンドウを開かないようにすることができます。例えば。:

`window.alias_open = window.open;

window.open = function(url、name、specs、replace){//何もしないか、何か賢いことをする...} `

それでもいくつかのポップアップを開きたい場合は、window.openの本文内のURLをホワイトリストに登録し、必要に応じてalias_openを呼び出すことができます。

1
Mitch

これがうまくいくかどうかはわかりませんが、ダブルイフラミングを試すことができます。無料のブロガーアカウントでサイトをiframeしてから、コードの読み込みを遅らせてブロガーアカウントをiframeします。そのため、ページが読み込まれる前にポップアップが表示され、機能するかどうかをお知らせください。

0
jingletv