首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Chrome中的window.open之后,Visibility API不起作用

在Chrome中,当使用window.open()方法打开一个新窗口后,Visibility API可能不起作用。Visibility API是一种浏览器提供的API,用于检测当前页面是否可见或隐藏,以便开发者可以根据页面的可见性来执行相应的操作。

然而,当使用window.open()方法打开一个新窗口时,新窗口的可见性可能无法被正确检测。这是因为新窗口的可见性与父窗口是相互独立的,它们有各自独立的文档对象和浏览器上下文。因此,即使在父窗口中使用了Visibility API来检测可见性,对于新窗口来说,它并不会继承父窗口的可见性状态。

解决这个问题的方法是,在新窗口中重新使用Visibility API来检测可见性。可以通过在新窗口的JavaScript代码中添加事件监听器来实现这一点。例如,可以监听document的visibilitychange事件,并在事件处理程序中执行相应的操作。

以下是一个示例代码:

代码语言:txt
复制
// 在新窗口中添加事件监听器
document.addEventListener('visibilitychange', function() {
  if (document.visibilityState === 'visible') {
    // 当前页面可见时执行的操作
  } else {
    // 当前页面隐藏时执行的操作
  }
});

需要注意的是,由于新窗口的可见性与父窗口是相互独立的,因此在新窗口中使用Visibility API时,无法直接获取到父窗口的可见性状态。如果需要在新窗口中获取父窗口的可见性状态,可以通过在window.open()方法中传递参数的方式将可见性状态传递给新窗口。

总结起来,当在Chrome中使用window.open()方法打开一个新窗口后,Visibility API可能不起作用。为了解决这个问题,可以在新窗口中重新使用Visibility API来检测可见性,并通过事件监听器来执行相应的操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python爬虫从入门到放弃(八)之 Selenium库使用

执行结果如下,从结果我们也可以看出基本山支持了常见所有浏览器: ?...,第一种是通过id方式,第二个是CSS选择器,第三种是xpath选择器,结果都是相同。...selenium.webdriver.common.by import By 这种方式实现 lis = browser.find_elements(By.CSS_SELECTOR,'.service-bd li') 同样在单个元素查找方法在多个元素查找同样存在...Chrome浏览器并打开淘宝输入ipad,然后删除,重新输入MakBook pro,并点击搜索 Selenium所有的api文档:http://selenium-python.readthedocs.io.../api.html#module-selenium.webdriver.common.action_chains 交互动作 将动作附加到动作链串行执行 from selenium import webdriver

2.9K70

python爬虫开发之selenium模块详细使用方法与实例全解

python爬虫模块selenium简介 selenium主要是用来做自动化测试,支持多种浏览器,爬虫主要用来解决JavaScript渲染问题。...import webdriver #webdriver可以认为是浏览器驱动器,要驱动浏览器必须用到webdriver,支持多种浏览器,这里以Chrome为例 browser = webdriver.Chrome...#module-selenium.webdriver.remote.webelement#可以有属性、截图等等 五、交互动作,驱动浏览器进行动作,模拟拖拽动作,将动作附加到动作链串行执行 from...元素可见,传入定位元组 visibility_of 可见,传入元素对象 presence_of_all_elements_located 所有元素加载出 text_to_be_present_in_element...() browser.get('https://www.zalou.cn') browser.execute_script('window.open()') print(browser.window_handles

1.8K10

Electron webview完全指南

作用上类似于HTML里iframe标签,但跑在独立进程,主要出于安全性考虑 从应用场景来看,类似于于AndroidWebView,外部对嵌入页面的控制权较大,包括CSS/JS注入、资源拦截等,而嵌入页面对外部影响很小...确定了画布之后,与webview关联webContents对象负责渲染HTML,把要嵌入页面内容画上去 那么,正常情况下,二者关系应该是一对一,即每个webview都有一个与之关联webContents...chrome-devtools-frames 每个Frame对应一个页面,每个页面都有自己window对象,在这里切换window上下文 四.重写新窗体跳转 webview默认只支持在当前窗体打开链接跳转...大致原因是不允许重写webviewdisplay值,只能是flex/inline-flex,其它值会引发奇怪问题 官方建议采用:visibility: hidden来隐藏webview,但仍然占据空间...> 像上面开了之后可以在webview加载页面里使用Node API,如require(),process P.S.preload属性指定JS文件允许使用Node API,无论开不开

6.9K31

控制台禁用js_禁止直接访问js

document.addEventListener(‘'contextmenu'’, function(event){ return event.returnValue = false }) 激活成功教程:还可以使用浏览器菜单开发者工具打开控制台...上述方法需要注意浏览器对于defineProperty支持,另外在firefox浏览器失效,因为firefox浏览器对于对象监听属性不会取值,需要手动点开才会触发。...所以对于firefox需要另辟蹊跷才行,这里我选择使用debugger语句来实现,debugger 语句调用任何可用调试功能,可以阻断代码执行,如果没有调试功能可用,则此语句不起作用。...代码测试仅测试了firefox、ie、chrome浏览器及部分chrome内核浏览器(如360、qq浏览器、UC浏览器、搜狗浏览器) 5、利用debugger特性,无限递归 这个方法不能监测控制台被打开...上面也说了:debugger 语句调用任何可用调试功能,可以阻断代码执行,如果没有调试功能可用,则此语句不起作用

9.6K20

window.open被浏览器拦截问题

时机 由上述可知,使用window.open时机,应该是在用户操作(如点击操作)时同步调用 // 会被拦截 window.open('https://javascript.info'); // 不会被拦截...('http://google.com'), 2000); }; 在不同浏览器实际测试时间间隔为: Chrome:小于5s(不包括5s) FireFox:小于3s(不包括3s) Edge:小于5s(不包括...Chrome测试测试代码如下: // a标签形式 const windowOpenBlank = (src) => { console.log('a标签') let a = document.querySelector...引导弹窗 数据异步请求完成之后,弹出一个引导弹窗,用户点击确认按钮之后使用window.open直接跳转 弹窗广告插件 浏览器一般都会有一些第三方弹窗广告拦截插件,网上能找大概原理如下: 针对特定弹窗广告...,异步调用window.open被拦截是浏览器自带机制,和是否使用广告插件无关

2.9K40

contextIsolation | Electron 安全

//www.electronjs.org/zh/docs/latest/tutorial/process-model 在官网介绍,将 Electron 流程模型称为多进程模型 上面是 Chrome...主进程在 Node.js 环境运行,这意味着它具有 require 模块和使用所有 Node.js API 能力。...这些脚本虽运行于渲染器环境,却因能访问 Node.js API 而拥有了更多权限。...因为预加载脚本与浏览器共享同一个全局 Window 接口,并且可以访问 Node.js API,所以它通过在全局 window 暴露任意 API 来增强渲染器,以便你网页内容使用。...版本修复测试 按照上一篇文章,window.open 问题是在 Electron 14.0 修复,所以我们再测试一下上下文隔离是不是也在 14.0 解决 确实在 14.0.0 中进行了修复

17110

JS:Web Storage API(localStorage、sessionStorage)

浏览器兼容性 2. localStorage 3. sessionStorage Web Storage API 提供了存储机制,通过该机制,浏览器可以安全地存储键值对,比使用 cookie 更加直观。...浏览器兼容性 2. localStorage localStorage 存储数据是永久性,除非通过 JavaScript 删除或者用户清除浏览器缓存,否则数据将一直保留在用户电脑上,永不过期; localStorage...作用域受同源策略限制(协议、主机名、端口),同源文档间共享同样localStorage数据; localStorage 作用域也受浏览器厂商限制,Chrome 与 Firefox localStorage...无法共享; localStorage 只能存储字符串!!!!... <meta http-equiv="X-UA-Compatible" content="IE=edge,<em>chrome</em>

1.4K40

Document.Referrer丢失几个原因

但是,出于各种各样原因,有时候Javascript读到referrer却是空字符串。下面总结一下哪些情况下会丢失referrer。...IE5.5+ 下返回空字符串 Chrome3.0+,Firefox3.5,Opera9.6,Safari3.2.2均正常返回来源网页 window.open方式打开新窗口 示例: 访问Google 点击此链接会在新窗口打开Google网站,我们在地址栏输入以下js代码就可以看到发送...同时,这个值指向是Flash文件地址,而不是来源网页地址。 Chrome4.0下点击Flash到达新窗口之后,Referrer也是指向Flash文件地址,而不是源网页地址。...例如,某个Flash广告,点击之后到达网址是http://www.example.com/,为了监控此流量是从哪个渠道过来,我们可以修改此投放着陆Url,改成http://www.example.com

4K20

ajax返回url,window.open(url)错误

功能场景:是一个文件预览功能,前端调用接口之后,后端返回一个url,前端打开这个url 就可以看到文件预览内容 image.png 问题: window.open(url)打开新窗口显示报错 image.png...但是通过直接点击打印出来url,或者把url字符串放到浏览器窗口,再或者把url字符串放到window.open()里面,都是可以正常打开 网上找了很多方法,试过了以下几种 1、发请求前先打开一个空白窗口...,在ajax回调函数里拿到url之后再 把url 赋值给 window.location.href 2、试过加一个定时器 3、试过a标签 4、试过在watch监听url变化,再赋值给 window.location.href...以上办法都不通 实在没办法了,于是找了我们老大 老大说这种情况应该是chrome安全策略拦截了,referer不是同一个域 最终解决办法是 image.png 成功!...这个写法是为了去掉refer,javascript:;跳转一个新页面,而window.name 在此次发现类似于一个容器,对比以下两个效果 如果直接执行以下代码,会跳转到一个空白页面 window.open

2.3K20

刷新关闭页面之前发送请求

chrome 下长这个样子,你们肯定都见过: 如何使用 这个 API 使用非常简单,只要在页面加载时候监听一下此事件,在需要出现弹窗时候return 一个可以转化为 true 值,就可以了。...没有回调 API,无法得知 弹窗标题: chrome 刷新页面的标题: 重新加载此网站chrome 关闭页面的标题: 离开此网站现在大部分浏览器都不允许修改弹窗标题,这个是为了安全考虑,来保证用户不受到错误信息误导...到这里我陷入了迷茫,盯着 beforeunload这个 API 思考了起了人生意义(其实是在发呆),盯着盯着,从 beforeunload before我也就想到了 unload这个 API。...经过一顿分析:发现是 axios请求是异步问题,谷歌之后发现axios不支持同步请求 最后使用原生XMLHttpRequest对象,让请求同步 大功告成!...小结: 在这两个API,还有些事项需要注意: alert/ confirm/ debugger/ window.open等都无法使用 抛出错误无法终止这两个API 谨慎使用异步

3.4K40

Chrome打开新窗口

一般点击打开新窗口,有几种方式: 1、超链接a  有href属性、target为_blank 2、iframe,其target为_blank 3、window.open<可能会被拦截,看用户浏览器安全设置...也必须设为_blank 现在遇到一个需求: 做了一个后台运维管理系统,在点击datagrid头部一个按钮,需要打开一个新窗口 因为extjs运行效率比较低,所以选择使用chrome...访问系统,而在操作些按钮时候发现很多很奇特现象,这些现象只出现在chrome: 1、打开一个窗口后,些窗口不关闭,将无法打开多个窗口,即使原有窗口关闭 打开窗口方式:window.open、form...提交、iframe--表现上一致 2、页面中原本就有一个form,每次操作就修改里面一个参数,设置其值为随机数,亦不行 改用window.open还发现一个问题,就是弹出窗口是没有工具栏和地址栏,且不在新选项卡打开...后来搜索到一篇文章,有所启发,就有了如下代码: var nwin = window.open(); nwin.location = ‘xxxx’;//需要打开地址 如果使用ajax请求地址后面的参数的话

3.5K30

滥用Edge浏览器“恶意站点警告”特性,实现地址栏欺骗

事实上,通过使用continuous history.pushState trick 技巧Jeromesegura(twitter)发送给我Chrome版本真的能冻结浏览器。...我知道其他浏览器(至少IE以及Chrome)也在做同样事情,我很高兴在Edge上也能看到。然而,我很好奇这些警告页面的真实来源,因为地址栏指向这个URL其内容很明显不在黑名单之列。...在Edge按下F12打开开发者工具,之后在控制台中键入location。 ? Wow! 似乎真实URL并没有显示在地址栏。...浏览器明确提示我们这里存在一个问题(拒绝访问),之后浏览器拒绝加载一个资源。...使用window.open手动尝试了几次之后,我们可以得出Edge浏览器能合理加载acr_error.htm页面,但会完全拒绝加载BlockSite.htm结论。

1.5K90

Flash打开新窗口 被浏览器拦截问题 navigateToURL被拦截 真正试验结果

我对js研究不深,我所了解就是,必须是用户操作处理过程,用window.open才能顺利通过浏览器拦截检查。...同样地,在Flash,也有很多类似的安全限制,必须是用户操作才能触发一些危险代码执行(例如,打开文件选择框)。   今天,在处理XXXX时候,点击flash按钮时,无法正常弹出新窗口。...好了,说了一堆,结论如下: 要能正常弹出窗口,必须满足以下条件: 首先,不管什么浏览器,都用navigateToURL (Flashapi) 然后, IE8/IE9:用户操作  &&   Flash...wmode为window(transparent就不行了) Firefox:用户操作  (wmode为window或者transparent都可以) chrome:用户操作  (wmode为window...或者transparent都可以) 需要注意是:所谓用户操作,必须是在本次事件处理同步执行过程,不能有setTimeout等”异步“处理。

1.1K50
领券