Как заблокировать всплывающее окно из iframe? - PullRequest
13 голосов
/ 16 декабря 2010

Я встраиваю страницу с всплывающим окном выхода. Когда вы закрываете страницу, она автоматически запускает всплывающее окно.

Как отключить всплывающие окна из iframe при выходе?

Ответы [ 7 ]

8 голосов
/ 28 января 2014

Если вы хотите заблокировать что-то вроде рекламы POP up или что-то с веб-сайта, который вы показываете в IFRAME - это довольно просто.

Создайте framefilter.php и javascriptfilter.php , на который указывает ваш iframe.Вы можете изменить его так, чтобы он соответствовал вашим потребностям, таким как onload, бла-бла и т. Д. Но, как есть, он работает хорошо для меня довольно долгое время.Надеюсь, что это поможет.

Замените ваш стандартный HTML-код IFRAME следующим:

    <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;

}

?>
3 голосов
/ 08 апреля 2017

Довольно старый вопрос, но я решил предложить более новое решение, так как это лучший результат в Google.

Если вы хотите заблокировать iframe от открытия окон, вы можете использовать новый HTML5-атрибут «песочница» в вашем iframe.

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

Это должно препятствовать выполнению чего-либо (кроме запуска javascript, который может потребоваться для правильной работы страницы):

<iframe sandbox="allow-scripts" src="your/url/here"></iframe>
2 голосов
/ 29 мая 2015

Установка атрибута песочницы в элементе IFrame должна работать.

1 голос
/ 09 октября 2012

На самом деле, это возможно .Ну, по крайней мере, во многих случаях.Часто код в iframe будет запускать что-то вроде top.window.open(...), чтобы открыть всплывающее окно.Вы можете переопределить метод window.open, чтобы он все еще существовал, но не открывал окно.Например:

`window.alias_open = window.open;

window.open = функция (url, name, specs, replace) {// Ничего не делать или делать что-то умное ...} `

Если вы все еще хотите, чтобы некоторые всплывающие окна открывались, вы можете добавить в белый список URL-адреса в теле window.open и при необходимости вызвать alias_open.

1 голос
/ 10 февраля 2011

Я не думаю, что это возможно.

  • Во-первых (и это самое главное), если iframe находится в другом домене, вы не можете изменить его DOM - например, обработчики onunload. Если это так, то другие две проблемы спорны.
  • секунду, даже если бы вы могли, вам нужно каким-то образом удалить слушателя. Если слушатель загружается через window.onunload, это будет просто; в противном случае, не так много.
  • в-третьих, в долгосрочной перспективе это приведет к той же гонке вооружений, что и разрушители фреймов

Единственная возможность, которую я вижу, носит нетехнический характер: узнайте у любого, кто запускает этот сайт внутри iframe, могут ли они создать для вас специальную страницу, без такой всплывающей надписи onunload. В большинстве случаев либо

  • a) может быть сделано специальное соглашение (хотя не всегда бесплатно), или
  • b) удаление функциональности будет нарушением ToS, и в этом случае вам придется искать кого-то другого, предоставляющего аналогичную функциональность, без всплывающих окон (и реально у большинства служб имеется более одного поставщика)
0 голосов
/ 27 августа 2012

Я не уверен, что это сработает, но вы можете попробовать двойной Ифрейминг. Iframe сайт в бесплатной учетной записи блоггера, затем iframe учетная запись блоггера с кодом загрузки с задержкой. поэтому всплывающее окно появится перед загрузкой страницы, дайте мне знать, если она работает.

0 голосов
/ 16 декабря 2010

Используйте современный браузер - все они имеют приличную блокировку всплывающих окон

...