2010-12-16 63 views
12

我正在嵌入具有退出彈出窗口的頁面。當你關閉頁面時,它會自動啓動一個彈出窗口。如何阻止來自iframe的彈出窗口?

如何在退出時禁用來自iframe的彈出窗口?

+2

Parhaps你應該對你的問題 – 2010-12-16 14:33:32

+4

闡述不嵌入有你不喜歡的行爲的頁面。 – Quentin 2010-12-16 14:37:39

+2

他問一個合法的問題... 「不嵌入代碼與不良行爲」是一個不好的回答 讓我看看....你怎麼編碼這個或那個....以及不要編碼它..成爲一名水管工...有問題解決了.... 我有同樣的問題......我沒有奢侈的告訴我的老闆像...好吧,我們只是不嵌入它.... 保羅..你有沒有解決這個問題...? – 2011-02-10 12:04:48

回答

-5

使用新型瀏覽器 - 他們都配有體面的彈出窗口攔截功能

+0

對不起 - 爲什麼要投票?您想知道如何禁用彈出窗口 - 使用現代瀏覽器禁用這些功能 – 2010-12-16 14:20:17

+1

在這種情況下,請勿嵌入具有不良行爲的代碼 – 2010-12-16 15:23:45

1

我不認爲這是可能的。

  • 首先(也是最重要的),如果iframe位於不同的域中,則不能更改其DOM - 例如onunload處理程序。如果是這樣,另外兩個問題是沒有意義的。
  • 秒,即使可以,您也必須以某種方式刪除偵聽器。如果偵聽器是通過window.onunload加載的,那很簡單;否則,不是那麼多。
  • 第三,從長遠來看,這將導致相同的軍備競賽的frame-busting-busters

我看到的唯一的可能性是在本質上非技術:與誰如果他們能運行該站點的iframe中檢查爲你製作一個特殊頁面,一個沒有這樣的onunload彈出窗口。在大多數情況下,無論是

  • 一)一些特殊的安排可以使(但並不總是免費的),或
  • b)去除功能將違反本服務條款,在這種情況下,你必須尋找其他人提供類似的功能,沒有彈出窗口(實際上,大多數服務都不止一個提供商)
0

我不確定這是否會工作,但你可以嘗試雙Iframing。 iframe將該網站放在免費的博客賬戶中,然後將iframe中的博客賬戶加入延遲加載代碼。所以彈出窗口會在頁面加載之前發生,讓我知道它是否有效。

0

實際上,這個可能的。至少在很多情況下。通常,iframe中的代碼將運行諸如top.window.open(...)之類的代碼來打開彈出窗口。您可以重新定義window.open方法,使其仍然存在,但不會打開窗口。例如:

` window.alias_open = window.open;

window.open =功能(URL,名稱,規格,更換){// 什麼都不做,或者做一些智能... } `

如果你還是想一些彈出窗口打開,您可以將window.open正文中的網址列入白名單,並根據需要撥打alias_open

8

如果您想要阻止類似POP的廣告或來自您在IFRAME中顯示的網站的內容 - 這相當容易。

做一個framefilter.phpjavascriptfilter.php,你的iframe的點。 您可以對其進行修改以滿足您的需求,例如onload等等等等。 但是,作爲/是 - 它對我來說一直工作很好。希望能幫助到你。

這個替換你的標準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; 

} 

?> 
+0

您應該更換'isNaN('cause'isNull()'未定義。 – 2015-06-15 20:16:22

+0

你的替代品應該考慮一個包含func名字和括號之間的空格的情況,最好使用:'$ raw = preg_replace(「#alert [] {0,} \\(#i」,「isNaN(」,$ ');' – 2015-06-15 20:18:16

+0

你的preg_match無效。應該是:'if(empty(preg_match(「#decode \\(#i」,$ raw))){' – 2015-06-15 20:19:16

2

設置沙箱屬性上IFrame元素應該工作。

3

一個很老的問題,但我想我會提供一個更新的解決方案,因爲這是谷歌的最高結果。

如果您想阻止打開窗口的iframe,您可以在iframe上使用新的HTML5「沙盒」屬性。

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

這應該保持它做任何事情(除了運行可能需要對頁面的JavaScript才能正常工作):

<iframe sandbox="allow-scripts" src="your/url/here"></iframe> 
相關問題