提问人:jeromej 提问时间:9/22/2014 更新时间:5/26/2015 访问量:1155
打开一个“弹出窗口”而不聚焦它
Open a "popup" without focusing it
问:
我一直在尝试打开一个“弹出窗口”[1],而它没有自动获得焦点。
我试图从开场白或弹出窗口本身模糊它,但没有成功。 我还寻找了弹出式窗口,但在 Google 上没有找到任何与这两个主题相关的内容。
我正在使用 Firefox。(嗯......Palemoon 24.7.1 实际上适用于 x64)
我的目标是能够打开一堆选项卡(例如,通过中键单击),并让它们在稍后自行关闭。
要在Firefox和afaik中执行此操作,您必须使用弹出窗口(对吗?但是每次我打开一个新选项卡(中键单击)时,它都会聚焦在它上面,这非常烦人。
[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); } }
评论
最后,我想我用这个技术或多或少地得到了我想要实现的目标:
打开的选项卡(“弹出窗口”)将与 Web 服务器(在我的情况下,在 Python 中)进行通信,这要归功于使用 GreaseMonkey 等插件加载的 JavaScript。
然后,服务器会告诉弹出窗口何时自行关闭:效果很好!
编辑:我只是想到了一种替代方法(假装),它可能适合您的需求,也可能不适合您的需求(取决于您的应用程序)。
打开一个带有当前 URL 的“弹出窗口”(新选项卡)(这是它可能对您有用或不适合您的地方),然后将第一页的 URL 更改为您正在寻找的“弹出窗口”。
评论
window.focus()
focus
blur