Chrome 扩展:如何禁用页面可见性 API

     2023-03-05     257

关键词:

【中文标题】Chrome 扩展:如何禁用页面可见性 API【英文标题】:Chrome Extension: How to Disable Page Visibility API 【发布时间】:2018-05-19 12:42:18 【问题描述】:

我正在编写一个 Chrome 扩展程序,它需要防止网页触发 document visibilitychange 事件。至少我需要能够覆盖 document.visibilityState(即使它是只读属性)。如果不可能,因为这个扩展仅用于我的目的,不会出现在 Chrome 扩展商店中,有没有办法可以配置我的 Chrome 浏览器来实现我想要的?我只需要在 Chrome 的“开发者模式”开启时使用此扩展程序,其他时间都不需要。

我希望有人能想出一种创造性的方式来实现这一目标。谢谢。

请注意! 4年前的答案中有一个解决方案不再在较新版本的Chrome中生效: Spoof or disable the Page Visibility API

自己测试一下:

// This codes worked 4 years ago but not anymore
var c='(function()var a=Node.prototype.addEventListener;Node.prototype.addEventListener=function(e)if(e=="visibilitychange"||e=="webkitvisibilitychange")else a.apply(this,arguments))()'
, E=document.documentElement;
E.setAttribute('onreset', c);
E.dispatchEvent(new CustomEvent('reset'));
E.removeAttribute('onreset');

// THIS WILL STILL LOG THE STATES EVEN WITH THE ABOVE CODE RUNNING
document.addEventListener("visibilitychange", function() 
    console.log( document.visibilityState );
);

如果在 Chrome 中无法实现,是否有 Firefox/Safari/Opera 浏览器代码可以实现这一点?

【问题讨论】:

没有测试,但代码应该使用EventTarget.prototype,而不是Node。 此外,该页面可能禁止内联代码,因此我会尝试将 c 文本插入到由 Chrome 扩展程序的内容脚本添加时从页面 CSP 中排除的 script 元素中。 我尝试用 EventTarget.prototype 替换 Node.prototype,但仍然没有成功。该代码位于一个单独的文件中,尽管名为 dont.js,我通过在其中抛出一个 alert() 来确保它正在运行,并且我确认它正在运行。 【参考方案1】:

这是我的解决方案:

for (event_name of ["visibilitychange", "webkitvisibilitychange", "blur"]) 
  window.addEventListener(event_name, function(event) 
        event.stopImmediatePropagation();
    , true);

我添加了blur 事件,因为我想跳过的视频 (everfi.net) 使用它来检测我何时切换窗口。与visibilitychangewebkitvisibilitychange 一起阻止该事件起到了作用:)

我还修改了扩展的清单,使其在 iframe 中工作。

完整代码(chrome 扩展):https://github.com/NavinF/dont

确认使用以下狗牌:

Google Chrome   63.0.3239.132 (Official Build) (64-bit)
Revision    2e6edcfee630baa3775f37cb11796b1603a64360-refs/branch-heads/3239@#709
OS  Mac OS X
JavaScript  V8 6.3.292.49
Command Line    /Applications/Google Chrome.app/Contents/MacOS/Google Chrome --flag-switches-begin --flag-switches-end

【讨论】:

折叠可见性时如何禁用对组合框元素的验证?

】折叠可见性时如何禁用对组合框元素的验证?【英文标题】:Howtodisablevalidationofacomboxelementwhenvisibilityiscollapsed?【发布时间】:2021-11-0300:26:53【问题描述】:我想在ComboBox或TextBox的可见性折叠时禁用它们的验证。我可以在XAML代... 查看详情

如何在 BIRT 中禁用或启用图表可见性

】如何在BIRT中禁用或启用图表可见性【英文标题】:HowtodisableorenablethechartvisibilityinBIRT【发布时间】:2015-05-1710:10:23【问题描述】:我有一个问题,我需要根据用户的选择用BIRT动态显示图表。谁能告诉我如何用脚本做到这一点... 查看详情

页面可见性 API 是不是在脚本中的任何其他内容之前运行

】页面可见性API是不是在脚本中的任何其他内容之前运行【英文标题】:DoespagevisibilityAPIrunswaybeforebeforeanythingelseinscript页面可见性API是否在脚本中的任何其他内容之前运行【发布时间】:2017-11-0507:36:15【问题描述】:下面的代码... 查看详情

如何启用被禁用的chrome第三方插件

使用开发者模式安装启用被Chrome停用的第三方扩展插件常用方法:在Chrome扩展管理页面,勾选开发者模式。然后浏览第三方扩展文件夹(未打包),或者将第三方扩展安装包crx格式,拖进去安装即可。以开发者模块安装插件,都... 查看详情

pagevisibilityapi(页面可见性)

页面可见性:就是对于用户来说,页面是显示还是隐藏,所谓显示的页面,就是我们正在看的页面;隐藏的页面,就是我们没有看的页面。因为,我们一次可以打开好多标签页面来回切换着,始终只有一个页面在我们眼前,其他... 查看详情

如何在 Chrome 扩展程序中禁用同源策略?

】如何在Chrome扩展程序中禁用同源策略?【英文标题】:HowtodisablesameoriginpolicyinChromeextension?【发布时间】:2011-08-2810:27:27【问题描述】:也许有一些设置可以在扩展上下文中禁用它。因为我正在开发一个扩展,所以我应该有责... 查看详情

sql禁用记录的可见性(代码片段)

查看详情

可见性的替代方案:折叠不适用于 IE 和 Chrome

】可见性的替代方案:折叠不适用于IE和Chrome【英文标题】:Alternativetovisibility:collapsenotworkingonIEandChrome【发布时间】:2011-01-3000:57:42【问题描述】:以下页面:<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DT... 查看详情

java并发基础java内存模型解决有序性和可见性

...能。于是我们要做的是按需禁用CPU缓存和编译器的优化。如何按需禁用CPU缓存和编译器的优化就需要提到Java内存模型。Java内存模型是一个复杂的规范。其中最为重要的便是Happens-Before规则。下面我们先介绍如何利用Happens-Before规... 查看详情

如何在页面加载时在反应打字稿中设置可见性

】如何在页面加载时在反应打字稿中设置可见性【英文标题】:Howtosetvisibilityinreacttypescriptonpageload【发布时间】:2021-12-2723:22:59【问题描述】:我在用户可以接受或拒绝的反应应用程序中创建cookie同意。如果用户已经接受cookie概... 查看详情

如何触发对 chrome 扩展按钮的点击?

】如何触发对chrome扩展按钮的点击?【英文标题】:Howtotriggeraclickonachromeextensionbutton?【发布时间】:2018-04-1300:51:34【问题描述】:我正在使用SeleniumWebDriver构建一个自动化测试套件。在某个时候,我必须通过打开或关闭Chrome扩展... 查看详情

为啥我们可以降低扩展类中属性的可见性?

】为啥我们可以降低扩展类中属性的可见性?【英文标题】:Whycanwereducevisibilityofapropertyinextendedclass?为什么我们可以降低扩展类中属性的可见性?【发布时间】:2014-09-0309:16:36【问题描述】:我有两个班,@​​987654321@:publicclassP... 查看详情

如何缩小 chrome 扩展的弹出窗口

】如何缩小chrome扩展的弹出窗口【英文标题】:howtozoomoutonanchromeextension\'spopup【发布时间】:2016-12-3017:28:10【问题描述】:某些扩展程序的弹出窗口不能很好地融入页面。如果我可以缩小弹出窗口,我可以正常使用它,但没有明... 查看详情

并发编程-java内存模型:解决可见性与有序性问题(代码片段)

...见性与有序性问题概念java内存模型本质上就是规范了JVM如何按照规则禁用缓存和编译器优化,既面向应用开发 查看详情

网页制作:html5标准提供了哪些新的api

...,在HTML5中有许多功能和接口很值得我们去了解和学习。页面可见性API--pageVisbility全屏API--fullScreen获取MediaAPI--getUserMedia电池API--battery资源预加载API--linkPrefetchingPageVisibility页面可见性API该API可以用来检测页面对于用户的可见性,... 查看详情

如何隐藏单个 PivotItem 的可见性

】如何隐藏单个PivotItem的可见性【英文标题】:HowtoHideVisibilityofIndividualPivotItem【发布时间】:2015-01-1014:34:41【问题描述】:我的页面中有一些数据透视项,根据应用程序是否处于试用模式,我需要显示或隐藏其中一个数据透视... 查看详情

如何在阵列适配器中长按时设置按钮的可见性

...在我需要将其设置为在长按列表项时可见..我创建了一个扩展数组适配器的类,我在这个类中声明了按钮..现在我需要在代码中访问此按钮以长按列表项以将其设置为可见..我如何在setOnI 查看详情

我的 google-chrome 扩展是不是有一个 chrome.* API 来找出它在哪些页面上被禁止编写脚本?

】我的google-chrome扩展是不是有一个chrome.*API来找出它在哪些页面上被禁止编写脚本?【英文标题】:Isthereachrome.*APIformygoogle-chromeextensiontofindoutonwhichpagesitisbarredfromscripting?我的google-chrome扩展是否有一个chrome.*API来找出它在哪些页... 查看详情