【发布时间】:2021-01-20 12:58:38
【问题描述】:
由于 Chrome 公然忽略了 window.open() 的记录功能,因此我正在拉扯我的头发,有时会在新窗口而不是新标签页中打开。有许多类似的问题,但似乎没有一个将其与 Shift 键的使用联系起来。
下面的代码打开相同的图像文件以响应单击、ctrl+单击、shift+单击或 alt+单击操作。代码希望在新选项卡中打开它们,除了 shift+click 之外,所有这些都实现了这一点,无论我如何尝试更改 window.open 调用,它总是会打开一个新窗口。
function clickHandler(ev) {
ev = ev || window.event;
if (!ev.ctrlKey && !ev.shiftKey && !ev.altKey) { //click
window.open('image.png','_blank');
ev.preventDefault(); return;
}
if (ev.ctrlKey && !ev.shiftKey && !ev.altKey) { //ctrl+click
window.open('image.png','_blank');
ev.preventDefault(); return;
}
if (!ev.ctrlKey && ev.shiftKey && !ev.altKey) { //shift+click
window.open('image.png','_blank');
ev.preventDefault(); return;
}
if (!ev.ctrlKey && !ev.shiftKey && ev.altKey) { //alt+click
window.open('image.png','_blank');
ev.preventDefault(); return;
}
}
<div onclick="clickHandler(event);"> Click here </div>
对逐项处理(即每个部分都以返回结尾)表示歉意,但这是从一段更长的代码中提取的。我的原始代码是处理 SVG 元素上的点击操作,但这似乎无关紧要。哪个操作的配置在用户的控制下执行,因此我希望根据文档(如果可能)使它们都以受控方式运行。
看起来 Google 正在对用户强加约定,而忽略了这样一个事实,即 Chrome 应该是通用浏览器,而不仅仅是 Google 搜索的容器(抱歉,偏执狂咆哮)。
[为澄清而编辑]
这并不是专门针对在新窗口中打开链接的 Shift+Click 的 Chrome 约定。此应用程序的最终用户单击 SVG 元素,not 链接,并且所有修饰符(Shift、Cntl 等)都可供他们使用以配置功能。然而,Chrome 浏览器正在根据之前的一些鼠标操作更改 window.open() 调用的功能,这是一个巨大的假设,即他们要么点击了一个链接,要么甚至意识到这相当于点击了一些链接。链接。
【问题讨论】:
标签: javascript html google-chrome event-handling