【问题标题】:override alert() function for a webpage覆盖网页的 alert() 函数
【发布时间】:2013-11-16 16:13:07
【问题描述】:

我基本上是在尝试阻止在我的网页中显示任何自定义对话框。 基本上是第三方广告网络,有时可能会使用一些恶意代码向最终用户显示 alert()。

我遇到了一种简单的方法,可以覆盖主页上的警报:

Window.prototype.alert = function() {console.log("alert prevented!")} 所以对于像这样的基本 html 页面,它工作得很好:

<html> <body> <script> Window.prototype.alert = function() {console.log("an alert was averted");} </script>
<div> <a onclick="alert(1)"> This is an alert inside the body</a> </div> </body> </html>

但是在图片中引入一个iframe,就会弹出iframe内的alert。

我仍然想要实现的是,如果有 &lt;iframe&gt; 或任何类似的 HTML 组件,基本上会创建一个单独的窗口,也不应该允许显示任何警报()。 我不太确定这是否可行,但还有什么建议吗?

【问题讨论】:

  • 可以在jquery中解决吗?
  • 如果无法通过任何简单直接的 js 代码完成,那么如果可以通过 jquery 实现,请继续提供解决方案 :)

标签: javascript html iframe overriding alert


【解决方案1】:

这对于旧浏览器来说可能是不可能的,但新的浏览器支持iframe 中的sandbox 属性。 “更新”是指 IE 10 或更新版本或任何合理的 Chrome 或 Firefox 新版本。见support details

例如,如果您只想禁止弹出窗口,请使用:

<iframe src=foo.html sandbox=
  "allow-forms allow-pointer-lock allow-same-origin
   allow-scripts allow-top-navigation."></iframe>

这里我列出了这个属性值可能包含的所有可能值,除了allow-popups,所以这是唯一会被属性禁用的功能。

【讨论】:

  • 谢谢@Jukka。但我的需求主要是针对移动 webkit 浏览器(iOS、Android)。我在这里没有严格控制 iframe 的属性,因为所使用的广告标签是第三方的 javascript 标签,在某些情况下,它们会在 iframe 内向用户提供不合理的弹出窗口。
猜你喜欢
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 2010-10-10
  • 2019-05-09
  • 2012-10-07
  • 2018-02-26
相关资源
最近更新 更多