Javascript 如何阻止来自iframe的弹出窗口?
我正在嵌入一个有退出弹出窗口的页面。当您关闭页面时,它会自动启动一个弹出窗口Javascript 如何阻止来自iframe的弹出窗口?,javascript,html,iframe,popup,onunload,Javascript,Html,Iframe,Popup,Onunload,我正在嵌入一个有退出弹出窗口的页面。当您关闭页面时,它会自动启动一个弹出窗口 如何在退出时禁用来自iframe的弹出窗口?使用现代浏览器-它们都具有良好的弹出窗口阻止功能我认为这是不可能的 首先(也是最重要的一点),如果iframe位于不同的域中,则不能更改其DOM,例如onunload处理程序。如果是这样的话,其他两个问题就没有意义了 其次,即使可以,也必须以某种方式删除侦听器。如果侦听器是通过window.onunload加载的,那就简单了;否则,就不那么多了 第三,从长远来看,这将导致与
如何在退出时禁用来自iframe的弹出窗口?使用现代浏览器-它们都具有良好的弹出窗口阻止功能我认为这是不可能的
- 首先(也是最重要的一点),如果iframe位于不同的域中,则不能更改其DOM,例如onunload处理程序。如果是这样的话,其他两个问题就没有意义了
- 其次,即使可以,也必须以某种方式删除侦听器。如果侦听器是通过window.onunload加载的,那就简单了;否则,就不那么多了
- 第三,从长远来看,这将导致与美国同样的军备竞赛
- a) 可以做出一些特殊安排(尽管并非总是免费的),或者
- b) 删除该功能将违反ToS,在这种情况下,您必须在没有弹出窗口的情况下寻找提供类似功能的其他人(实际上,大多数服务不止一个提供商)
top.window.open(…)
的内容以打开弹出窗口。您可以重新定义window.open方法,使其仍然存在,但不打开窗口。例如:
`
window.alias_open=window.open
window.open=函数(url、名称、规格、替换){
//什么都不做,或者做些聪明的事。。。
}
`
如果您仍然希望打开一些弹出窗口,您可以在
窗口主体中列出URL的白名单。打开,并根据需要调用alias\u open
。如果您想阻止弹出广告或来自IFRAME中显示的网站的内容,这相当容易
制作iframe指向的framefilter.php和javascriptfilter.php。
您可以修改它以满足您的需要,例如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>
如果你能看到这一点,你的浏览器就看不到了
理解IFRAMES。不过,我们仍然会
请转到页面。
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;
?>
<?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;
}
?>
在IFrame元素上设置sandbox属性应该会起作用。这是一个很老的问题,但我想我会提供一个更新的解决方案,因为这是谷歌的顶级结果
如果要阻止iframe打开窗口,可以在iframe上使用新的HTML5“沙盒”属性
这将阻止它做任何事情(除了运行javascript,这可能是页面正常运行所必需的):
对不起,为什么要投反对票?你想知道如何禁用弹出窗口-使用现代浏览器禁用这些。在这种情况下,不要嵌入有不良行为的代码。也许你应该详细说明你的问题。不要嵌入有你不喜欢的行为的页面。他问的是一个合理的问题。。。“不要在代码中嵌入不受欢迎的行为”是一个糟糕的答案让我看看。。。。您如何编写这个或那个。。。。好吧,不要给它编码。。成为一名水管工。。。问题解决了。。。。我也有同样的问题。。。而且我没有权利告诉我的老板像。。。好吧,我们只是不嵌入它。。。。保罗。。你曾经解决过这个问题吗…?@John-请看@Piskvor的答案-这给出了合理的理由说明为什么这个方法行不通。如果你的老板不能接受现实,那么你的老板就是傻瓜。你应该替换代码< iSnAn(<代码>原因>代码> ISNULL()>代码>。你的替换应该考虑一个在FUNC名称和括号之间有空格的情况。最好使用:<代码> $RAW=PREGRY替换(“{警报”[{ 0,}),“iSnI”,“ISRAN”,$RAW。
您的preg_匹配无效。应该是:如果(空(preg_匹配(#decode\\\(#i“,$raw)){
哪一个更好,使用此解决方案还是是否使用iframe sanbox标记?这可能对沙盒属性也有帮助:
<iframe sandbox="allow-scripts" src="your/url/here"></iframe>