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

跨域关闭父窗口js

在Web开发中,跨域问题通常涉及到不同源(协议、域名、端口)之间的资源交互限制。当你尝试从一个源加载的网页去操作另一个源的资源时,浏览器会阻止这种行为,出于安全考虑。这就是同源策略。

如果你想要在子窗口(通常是通过window.open打开的新窗口或标签页)关闭其父窗口,并且这两个窗口属于不同的源,那么你会遇到跨域问题。由于同源策略的限制,子窗口无法直接访问或操作父窗口的对象。

但是,如果子窗口是由父窗口通过window.open打开的,并且父窗口的源是已知的,那么父窗口可以在打开子窗口时,将自身的引用传递给子窗口,子窗口就可以利用这个引用来关闭父窗口。这通常是通过在打开子窗口时设置一个特定的URL参数来实现的,该参数包含父窗口的窗口名称,然后子窗口可以解析这个参数来获取父窗口的引用。

以下是一个简单的示例,展示了如何在父窗口中打开子窗口,并允许子窗口关闭父窗口:

父窗口代码:

代码语言:txt
复制
// 父窗口打开子窗口,并传递自身的window.name作为标识
var childWindow = window.open('child.html?parentName=' + window.name, 'ChildWindow', 'width=400,height=300');

子窗口代码(child.html):

代码语言:txt
复制
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Child Window</title>
<script>
window.onload = function() {
    // 获取URL中的参数
    var urlParams = new URLSearchParams(window.location.search);
    var parentName = urlParams.get('parentName');
    
    // 如果存在父窗口名称,则关闭父窗口
    if (parentName) {
        window.opener = null; // 防止安全警告
        window.open('', parentName).close(); // 关闭父窗口
    }
};
</script>
</head>
<body>
<h1>Child Window</h1>
<p>This window will close its parent window.</p>
</body>
</html>

在这个例子中,父窗口通过window.open打开子窗口,并传递了自身的window.name作为参数。子窗口加载后,解析URL参数获取父窗口的名称,并尝试关闭它。

需要注意的是,这种方法只适用于父窗口主动打开子窗口的情况,并且子窗口可以信任父窗口的源。如果子窗口和父窗口是完全独立的,或者子窗口不是由父窗口打开的,那么由于跨域限制,子窗口将无法关闭父窗口。

此外,出于安全考虑,现代浏览器可能会有一些限制,防止恶意网站利用这种方法关闭用户的浏览器窗口或标签页。因此,在实际应用中,应该谨慎使用这种方法,并确保不会对用户造成困扰。

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

相关·内容

关闭模态窗口后,父窗口居然跑到了其他窗口的后面

关闭模态窗口后,父窗口居然跑到了其他窗口的后面 发布于 2018-02-05 05:58 更新于 2018...然而却一直有一个难缠的 BUG:当关闭模态窗口时,父窗口有时会跑到其他程序窗口的后面! 而最近读到了微软工程师写过的话之后,明白了这个 BUG 的产生缘由以及解决方法。 ---- 这是什么 BUG?...弹出一个模态窗口,然后将模态窗口的父窗口设置为自身窗口; 切换到其他程序窗口中(比如 Windows 资源管理器窗口); 切换回此模态窗口,然后关闭这个模态窗口上。...你会发现,模态窗口关闭后,父窗口并没有回到当前的顶层显示中。取而代之的,是其他程序的窗口(比如 Windows 资源管理器窗口)。...为解决兼容性问题的微软工程师默哀一分钟…… 我曾经尝试在模态子窗口关闭后激活一下父窗口,但这样会导致窗口的层级闪烁一下(Windows 资源管理器会短暂地显示到我们的窗口之上)。

9.4K20
  • SpringMvc解决js跨域

    前言: 跨站 HTTP 请求(Cross-site HTTP request)是指发起请求的资源所在域不同于该请求所指向资源所在的域的 HTTP 请求。...比如,可以使用 XMLHttpRequest 发起跨站 HTTP 请求。(这段描述跨域不准确,跨域并非浏览器限制了发起跨站请求,而是跨站请求可以正常发起,但是返回结果被浏览器拦截了。...最好的例子是crsf跨站攻击原理,请求是发送到了后端服务器无论是否跨域!...方法一 设置返回的Response跨域,适合所有服务端 普通参数跨域设置 在response的头文件添加 httpServletResponse.setHeader("Access-Control-Allow-Origin...带headr请求跨域设置 这样客户端需要发起 OPTIONS请求, 可以说是一个“预请求”,用于探测后续真正需要发起的跨域 POST 请求对于服务器来说是否是安全可接受的,因为跨域提交数据对于服务器来说可能存在很大的安全问题

    3.1K20

    js的跨域问题 和 jQuery的跨域问题

    跨域:两个不同域名之间的通信,称为跨域。 例如:http://www.baidu.com 和 http://www.sina.com.cn jQuery如何实现跨域请求呢?...答:使用JSONP形式实现跨域。 域:服务器的域名。服务器的域名的唯一标识需要满足:协议+域名+端口,必须保证是一致的,说明域相同。 跨域:在一个服务器上,去访问另一个服务器。...1、在js当前域中如果去调用另一个域的程序时,它不能够执行当前域的js函数,所以就不能得到你想要的数据了。怎么办呢?答案在下面。 2、在jQuery中使用JSONP形式实现跨域。...---- js的跨域问题图解,如下图所示: 传统的js的跨域处理: tomcat1的代码如下: 5.ajax_domain.html js的跨域问题-解决方案  -->     <!

    4.1K20

    js跨域解决方案

    二、什么是跨域 我们经常会在页面上使用ajax请求访问其他服务器的数据,此时,客户端会出现跨域问题. 跨域问题是由于javascript语言安全限制中的同源策略造成的....简单来说,同源策略是指一段脚本只能读取来自同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合..../b.js 不同域名 不允许 三、解决方案 1、通过修改document.domain来跨子域 基于iframe实现的跨域要求两个域具有aa.xx.com,bb.xx.com这种特点,也就是两个页面必须属于一个基础域...--[endif]--> 本质上就是利用parent.parent实现对父父页面中js的回调!...4、使用apache反向代理实现跨域 由于前端解决跨域问题的局限性比较大,对于 Ajax 跨域或是 iframe 跨域,建议用服务器端解决方案。

    4K10

    js---跨域的问题

    一:跨域一般的报错情况   一般来说,如果你在开发中需要进行跨域操作(从一个非同源网站发送请求获取数据),一般而言,你在浏览器控制台看到的结果为: ?...二:同源策略   说到跨域就不得不提“同源策略”。   那么,怎么判断文档来源是否相同呢?很简单,看三个部分: 协议、主机、端口号。只要其中一个部分不同,则不同源。...三:如何跨域 1.针对上述应用场景的第一种情况,可以设置Document对象的domain属性   2.但是设置时使用的字符串必须具有有效的域前缀或者它本身。   ...2.jsonp     1.原理:通过动态元素来使用,可以通过src属性指定一个跨域URL。     2. ? 3.jq jsonp ? 总结: 优点: 兼容性强。

    2.6K20

    【JS应用】Iframe 解决跨域

    有些都是很普通很常见的知识,但是为了巩固自己的知识面,梳理自己的知识树,所以每个知识点都会写成文章,所有文章都会放在公众号右下角的前端进阶课程总结中~~~也希望能够帮助到需要的人~~ 跨域的东西, 简直不要接触太多...,网上相关内容一抓一大把,但是突然学习到一个关于前端解决跨域的方式 就是 利用 iframe 不管你有没有了解过,反正我没有 我觉得很有用并且容易忘,所以我记录下来哈哈哈 下面会分三块内容进行描述...1、基本原理 2、简单模拟 2、封装的函数 3、封装函数实战 解决场景 现在我们在 a.com 的域名下有一个页面 我们要请求 b.com 下的一个接口,很明显是会跨域的,无法直接请求 今天我们使用 iframe...来解决这个问题 基本原理 1、需要三个页面 两个同域(a.com)的 页面,一个和接口同域的 页面(b.com) 其中一个页面是父页面,也就是真正的内容页,展示数据的 另外两个作为子页面,是辅助父页面请求跨域数据用的.../xxxx,但是跨域 1、内容页 A 嵌入一个隐藏 iframe,iframe 加载 b.com 下的辅助页面 B 2、辅助页面B 开始请求接口 b.com/xxx,请求成功,存放到 window.name

    15.3K11

    新版chrome浏览器关闭跨域检查

    最佳情况是让后端改正,但是偶尔时间赶不及只能自己关掉浏览器的跨域。...版本号49之后的chrome跨域设置 chrome的版本升到49之后,跨域设置比以前严格了,在打开命令上加--disable-web-security之后还需要给出新的用户个人信息的目录。...49版本之后,如果设置chrome浏览器为支持跨域模式,需要指定出一个个人信息目录,而不能使用默认的目录,估计是chrome浏览器怕用户勿使用跨域模式泄露自己的个人信息(主要是cookie,很多网站的登录...Mac设置方法 打开一个可跨域的chrome窗口实现方法: 打开终端 输入下面的命令( 需要替换路径中的yourname ) ``` cd /Applications/Google\ Chrome.app...3.点击应用和确定后关闭属性页面,并打开chrome浏览器。 再次打开chrome,发现有“--disable-web-security”相关的提示,说明chrome又能正常跨域工作了。

    4.7K30

    ajax跨域解决方案domain_js解决跨域问题

    跨域问题是针对JS和ajax的,html本身(比如a标签、script标签、甚至form标签(可以直接跨域发送数据并接收数据)等)没有跨域问题,。...跨域示例: 解决方案一:使用JSONP ajax请求受同源策略影响,不允许进行跨域请求,而script标签src属性中的链接却可以访问跨域的js脚本,利用这个特性,服务端不再返回JSON格式的数据...,而是返回一段调用某个函数的js代码,在src中进行了调用,这样实现了跨域。...JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP..."> $(function(){ $.ajax({ type:"get", url:"http://localhost:8080/qhdfl/jsonServlet",//跨域

    2.5K20
    领券