Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

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

}

?>

Ответ 2

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

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

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

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

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

Ответ 3

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

Ответ 4

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

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

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

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

Ответ 5

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

Ответ 6

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

` window.alias_open = window.open;

window.open = function (url, name, specs, replace) { // Не делай ничего, или сделай что-нибудь умное... } `

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

Ответ 7

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