打开一个“弹出窗口”而不聚焦它

Open a "popup" without focusing it

提问人:jeromej 提问时间:9/22/2014 更新时间:5/26/2015 访问量:1155

问:

我一直在尝试打开一个“弹出窗口”[1],而它没有自动获得焦点。

我试图从开场白或弹出窗口本身模糊它,但没有成功。 我还寻找了弹出式窗口,但在 Google 上没有找到任何与这两个主题相关的内容。

我正在使用 Firefox。(嗯......Palemoon 24.7.1 实际上适用于 x64

我的目标是能够打开一堆选项卡(例如,通过中键单击),并让它们在稍后自行关闭。

要在Firefox和afaik中执行此操作,您必须使用弹出窗口(对吗?但是每次我打开一个新选项卡(中键单击)时,它都会聚焦在它上面,这非常烦人。


[1] 或者其他任何能符合我期望的东西。

编辑:注意:这是供个人使用的。:)

javascript firefox 浏览器 弹出窗口 palemoon

评论

0赞 epascarello 9/22/2014
您正在尝试 90 年代所有弹出式广告所做的事情!所以没用?展示你尝试过的东西。window.focus()
1赞 hotforfeature 9/22/2014
您想用这些弹出窗口完成什么?由用户决定关闭网页/浏览器/弹出窗口,而不是您。这听起来从一开始就是一种不好的做法
0赞 jeromej 9/22/2014
@abmitchell 供个人使用:)我忘了提了,谢谢!我正在尝试自己启动一堆下载,并让它们自己关闭!
0赞 hotforfeature 9/22/2014
如果你愿意,一定要尝试一下,但是使用下载管理器可以完成比尝试关闭选项卡的脚本更多的任务。我不确定是否可以在Firefox中自动关闭选项卡
0赞 jeromej 9/22/2014
@epascarello主要是谷歌搜索很多,没有找到任何相关或有效的内容。其中 98% 是 和 .等。。。这些应该有效吗?!focusblur

答:

1赞 Makyen 9/23/2014 #1

首先是简单的:对于鼠标中键单击:在“选项卡”选项卡上的“工具->选项”中,有一个选项“当我在新选项卡中打开链接时,立即切换到它”。取消选中此选项后,选择“在新选项卡中打开”或鼠标中键单击的链接将在新选项卡中打开,而不会聚焦。在同一选项选项卡上,您还需要选中“在新选项卡中打开新窗口”(第一个复选框)。

这适用于大多数正常链接。实际上是 JavaScript 代码片段的链接在新选项卡中不起作用,因为它们依赖于当前页面中存在的代码。

我发现在Firefox中有用的一个变化是让光标根据它悬停在什么类型的链接上而改变。这将使您能够在基本层面上直观地区分单击链接时会发生什么,而无需查看目标地址。我最初是在askvg上找到的。它是对文件的补充(如果目录和文件不存在,请创建它们):<profile directory>/chrome/userContent.css

/* Change mouse cursor for hyperlinks that open in a new window or tab */
:link[target="_blank"], :visited[target="_blank"],
:link[target="_new"], :visited[target="_new"] {
cursor: crosshair;
}
/* Change mouse cursor for JavaScript links */
a[href^="javascript:"] {
cursor: move;
}

/* Cursor types
default - Normal select cursor
text - Text select cursor (I bar)
vertical-text - Vertical text select cursor
progress - Working in background cursor
wait - Busy cursor
help - Help cursor
crosshair - Precision select cursor
move - Move cursor
no-drop - Unavailable cursor
not-allowed - Unavailable cursor
e-resize - Horizontal resize cursor
n-resize - Vertical resize cursor
nw-resize - Diagonal resize 1 cursor
ne-resize - Diagonal resize 2 cursor
col-resize - Column resize cursor
row-resize - Row resize cursor
*/

除此之外,目前还不清楚你想在什么情况下这样做,或者至少你愿意在多大程度上完成这项工作。您提到在后台打开窗口/选项卡并自行关闭意味着您实际上不需要用户查看窗口/选项卡。是不是你只想对某些 URL 发出请求?使用 XMLHttpRequest 就足够了吗?

你自己想要这个,所以如果你走Firefox扩展的路线,那么打开标签和窗口是很容易的,而不是让它们被聚焦。它可以用 addTab() 来完成。

描述您总体上试图完成的任务以及您这样做的背景会很有帮助。

附加信息:

根据您描述的其他信息,您需要编写一个Firefox扩展程序,该扩展程序可以让您完全控制弹出窗口和选项卡,使它们按照您想要的方式工作。对于您想要的,您应该(至少)看到以下Mozilla文档:

选项卡式浏览器上复制示例:

// Add tab  (without it becoming active)
gBrowser.addTab("http://www.google.com/");

// Add tab, then make active
gBrowser.selectedTab = gBrowser.addTab("http://www.google.com/");

选项卡式浏览器

在正确的窗口/选项卡中打开 URL

chrome://browser/content/utilityOverlay.js 中提供了一些方法,使其易于打开 openUILinkIn 和 openUILink 等选项卡中的 URL。

openUILinkIn( url, where, allowThirdPartyFixup, postData, referrerUrl ) 哪里:

  • “当前”当前选项卡(如果没有任何浏览器窗口,则改为在新窗口中)
  • “tab”新选项卡(如果没有任何浏览器窗口,则改为在新窗口中)
  • “tabshifted”与“tab”相同,但如果默认为选择新选项卡,则在后台,反之亦然
  • “window” 新窗口
  • “保存”保存到磁盘(没有文件名提示!

同样来自选项卡式浏览器,覆盖扩展的代码示例,其中

将在新标签页、现有标签页或现有窗口中打开 URL 基于按下的鼠标按钮和热键(例如:Ctrl) 正在举行。给出的代码是针对菜单项的,但可以工作 对于其他XUL元素也同样如此。这仅适用于叠加层 的 browser.xul 中。

XUL:

<menuitem oncommand="myExtension.foo(event)" onclick="checkForMiddleClick(this, event)" label="Click me"/>

JS:

var myExtension = {
  foo: function(event) {
    openUILink("http://www.example.com", event, false, true);
  }
}

评论

0赞 jeromej 9/23/2014
但是,当中键单击打开弹出窗口时,您的第一个技巧不起作用。弹出窗口是弹出窗口,而不是真正的新选项卡。我已经取消了该选项。实际上,是的,用户不需要看到选项卡,我已经使用了一些用户脚本,以便下载自行开始,我的目标是这些选项卡将在下载开始后自行关闭。它有效。但现在我有了“焦点问题”。我可能会研究一下扩展,但我想保留一些“易于做,易于设置”的交易。感谢您的回复。
0赞 jeromej 9/24/2014
(此外,我需要执行页面中的 JS,因为我不想对那些下载网站的混淆 js 代码进行逆向工程)
0赞 Makyen 9/24/2014
添加Mozilla开发者网络链接和代码示例。
0赞 jeromej 9/27/2014
我对那个解决方案不感兴趣:太难实现,我想要一些简单的东西。谢谢你提供的信息,现在我知道这是可能的,如果我改变主意或需要它做其他事情。
0赞 jeromej 5/15/2015 #2

最后,我想我用这个技术或多或少地得到了我想要实现的目标:

打开的选项卡(“弹出窗口”)将与 Web 服务器(在我的情况下,在 Python 中)进行通信,这要归功于使用 GreaseMonkey 等插件加载的 JavaScript。

然后,服务器会告诉弹出窗口何时自行关闭:效果很好!


编辑:我只是想到了一种替代方法(假装),它可能适合您的需求,也可能不适合您的需求(取决于您的应用程序)。

打开一个带有当前 URL 的“弹出窗口”(新选项卡)(这是它可能对您有用或不适合您的地方),然后将第一页的 URL 更改为您正在寻找的“弹出窗口”。