繁体   English   中英

浏览器如何无法阻止弹出窗口?

[英]How can a browser be unable to block pop-ups?

我正在使用 firefox v84(最新的 atm),并且我还安装了 ublock。 Firefox 在其设置中设置为阻止弹出窗口,但我仍然从某些站点获得它们(尽管很少)。 它们在屏幕一角弹出非常小的 windows。 有时它显示“firefox 阻止弹出窗口”,有时它不显示。 我记得读过关于 javascript 的诡计,以某种方式创建弹出窗口 windows,即使它在浏览器中被阻止(所以它仍然有可能)。

无论如何,我的主要问题是,浏览器如何无法阻止弹出窗口? I'm a programmer myself and i know that, for example, in windows environment, if you want to create a window, you need to call the windows api, and relevant functions (CreateWindowEx etc) to do that (even if you don'不要明确地这样做,这就是幕后发生的事情)。 浏览器还负责读取解析并执行 javascript 代码。 所以只是简单地不要调用 CreateWindow function,它应该很容易,不是吗? 为什么这仍然是一个问题,为什么浏览器开发人员不能解决这个问题?

浏览器打开的弹出窗口可以(主要和基本上)有两种类型:

  • window.open的显式 javascript 调用
  • 与指定target的隐式链接(即: _blank

如果你只是简单地阻止两者,那么许多合法网站将不再工作,例如(但不限于)使用 OAuth 机制登录时。

浏览器和插件可以检测到一些模式和规则,以尝试阻止非法弹出窗口。 示例:浏览器将自动阻止任何不是由用户交互(单击按钮)直接触发的window.open

人们开始了猫捉老鼠的游戏,人们试图规避已知的限制并创造创造性的场景来迫使弹出窗口发生。 插件反过来会尝试捕捉这些机制并提供更新的检测行为,...

一种常见的技术确实是结合这两种弹出方法并提供间接页面浏览。 例子:

<a href="legit_page.html" target="_blank" onclick="location.href=other_page.html">

此代码将打开一个合法的弹出窗口,并且一旦弹出窗口已经打开,合法页面内的代码将重定向到一个非法站点,同时将当前页面导航到另一个合法页面。

您会在大多数继续有弹出窗口的网站上注意到这种行为。 它发生在用户交互中(单击链接或按钮,...)并浏览到另一个页面并同时打开弹出窗口。

在这种情况下,没有准确的方法来检测弹出窗口是否合法,除了手动异常和 URL 阻止列表,...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM