坚韧的闹钟 · json对象和字符串的相互转换 - fcyh · 2 周前 · |
面冷心慈的马克杯 · javascript刷新父页面的各种方法汇总 ...· 1 周前 · |
很酷的墨镜 · RDP登录相关开发者社区· 1 周前 · |
强健的猕猴桃 · js和jq给select绑定onchange ...· 1 周前 · |
有腹肌的伤痕 · javascript ...· 3 天前 · |
奔跑的遥控器 · 贝缇娜·齐摩曼 - 搜狗百科· 5 月前 · |
个性的手套 · 在拍摄关于转基因的纪录片时,崔永元们应该客观一些· 5 月前 · |
安静的麻辣香锅 · 今天起,珠海这项保费开始扣缴!_澎湃号·政务 ...· 5 月前 · |
不敢表白的紫菜 · 听说USP-NF版本号“消失”了?!_标准· 1 年前 · |
豁达的小马驹 · “新摩卡”直降6万元+,魏牌重塑价格体系,销 ...· 1 年前 · |
我似乎不能让这件事起作用。
响应点击,窗口A打开窗口B(然后有焦点)。然后,响应B的点击,窗口调用
window.opener.focus()
,但是焦点不会返回到A。
我为Chrome找到了一个奇怪的解决方案(29,可能还有其他)。如果我跑:
window.opener.name = 'somename';
window.open(window.opener.location.href, window.opener.name);
window.opener.focus();
它确实工作(并且不重新加载窗口A)。但这对火狐不起作用,而且这可能是个侥幸。
在我看来,
opener
和
focus
应该做什么是很清楚的,但是
window.opener.focus()
不起作用。我遗漏了什么?
发布于 2013-08-29 02:17:03
来自 精细手册
发出 请求 ,将窗口带到前面。由于用户设置,它可能会失败,而且在此方法返回之前,窗口不一定是最前面的窗口。
强调我的。调用
focus()
只是一个请求,浏览器可以随意忽略您,通常您应该会被忽略。考虑一下,如果你需要一个浏览器忽略你的请求的原因,你可以在别人打字的时候把焦点切换到一个很小的窗口,这样你就可以做什么坏事了。
如果您需要
focus()
来工作您的应用程序,那么您需要重新设计您的应用程序,以便它不需要调用
focus()
。
发布于 2016-01-05 07:37:19
我明白为什么browser/OS不允许子窗口接管焦点(滥用权力)。以下是一个解决办法:
JS家长:
var child = window.open('child.html', 'child');
window.external.comeback = function() {
var back = confirm('Are you sure you want to comback?');
if(back) {
child.close();
} else {
child.focus();
}
联署材料儿童:
// assuming you have jQuery
$('.btn').click() {
window.opener.external.comeback();
};
--我正在实际应用程序中使用这段代码来处理在子窗口中运行的签出请求,我需要优雅地返回到父窗口。
发布于 2021-11-16 19:07:43
我找到了一个合理的解决办法,使用网络 通知 。
正如在其他一些答案中提到的,在浏览器和操作系统中,window.opener.focus()可能无法工作。
我能够使用postMessage和通知使其工作。
要尝试这一点:在父(opener)选项卡中添加一个“message”事件侦听器,该侦听器通过单击侦听器创建通知:
window.addEventListener("message", (event) => {
if (!("Notification" in window)) {
alert("This browser does not support desktop notification");
// Let's check whether notification permissions have already been granted
else if (Notification.permission === "granted") {
// If it's okay let's create a notification
var notification = new Notification("The opener needs your attention");
// Add click listener that will perform a window focus
notification.onclick = function (x) {
window.focus();
this.close();
// Otherwise, we need to ask the user for permission
else if (Notification.permission !== "denied") {
Notification.requestPermission().then(function (permission) {
// If the user accepts, let's create a notification
if (permission === "granted") {
var notification = new Notification("The opener needs your attention");
// Add click listener that will perform a window focus
notification.onclick = function (x) {
window.focus();
this.close();
});
然后,在需要焦点回到父选项卡时,您需要从子选项卡使用postMessage:
// Called from child tab
坚韧的闹钟 · json对象和字符串的相互转换 - fcyh 2 周前 |
很酷的墨镜 · RDP登录相关开发者社区 1 周前 |
奔跑的遥控器 · 贝缇娜·齐摩曼 - 搜狗百科 5 月前 |
个性的手套 · 在拍摄关于转基因的纪录片时,崔永元们应该客观一些 5 月前 |
不敢表白的紫菜 · 听说USP-NF版本号“消失”了?!_标准 1 年前 |