问题 html打开新目标和焦点的网址


我正在尝试修复一个网站。

它会在新窗口/选项卡中打开帮助页面 <a href="..." target="help"> (没有其他框架有此名称)

这在第一次打开新窗口/选项卡时很有效,可以获得帮助。 但在随后的点击中,窗口/选项卡已加载但仍保持隐藏状态。

我试过这个:

<script>
    function OpenAndFocusHelp() {
        win=window.open('help/1000CH00017.htm','help');
        win.focus();
    }      
</script>

<a href="help.html" target="help" 
   onclick="OpenAndFocusHelp()">Help</a>

它不起作用!


10220
2017-12-28 13:48


起源

窗口正在加载,只是没有显示?它加载了正确的页面吗?它在每个浏览器中都有相同的行为吗?我认为这是一个窗口管理员关注的问题,而不是你可以用javascript做的事情,但我现在主演,我想跟随。 - jcolebrand


答案:


我认为此功能是特定于浏览器的,您无法定义聚焦新选项卡或窗口的行为。


3
2017-12-28 13:53





似乎现代浏览器不允许你这样做 window.focus 一个现有的窗口。或者至少,它不会给那个窗口焦点。 (IE9实际上会使选项卡闪烁,但大多数其他浏览器只是加载它,但没有表明应该将用户的注意力吸引到新窗口。)

因此,一种解决方案就是首先关闭窗口,然后立即重新打开窗口。例如, 声明以下函数

window.openOrFocus = function(url, name) {
    if (!window.popups)
        window.popups = {};
    if (window.popups[name])
        window.popups[name].close();
    window.popups[name] = window.open(url, name);
}

现在,您可以编写如下HTML:

<a href="javascript:void(0);" onclick="openOrFocus('http://jsfiddle.net/k3t6x/2/', 'window1')">Window 1</a><br />
<a href="javascript:void(0);" onclick="openOrFocus('http://jsfiddle.net/KR6w3/1/', 'window2')">Window 2</a><br />

由于它首先关闭窗口,因此它可靠地为新创建的子窗口提供焦点。

这个解决方案也使用了 window.popups 命名空间,如果你有一个名为的函数,那么重命名javascript示例中的用法 popups 或者否则与它相撞。

警告:这在回发后不起作用。这是因为一旦您离开当前页面,它就不再是子窗口的所有者。因此,它不能再关闭它们。然而,它仅仅降低到使用它的通常(非聚焦)行为 target 属性。

测试中: Firefox 4,Chrome 11,IE 9
JsFiddle演示:  http://jsfiddle.net/aqxBy/7/


7
2018-06-05 03:20





你可以改为使用这样的代码:

var _arrAllWindows = new Array();
function OpenOrFocus(oLink, sTarget) {
    var oWindow = _arrAllWindows[sTarget];
    if (!oWindow || oWindow.closed) {
        oWindow = window.open(oLink.href, sTarget);
        _arrAllWindows[sTarget] = oWindow;
    }
    oWindow.focus();
    return false;
}

然后打电话给它,有这样的链接:

<a href="http://www.google.com" onclick="return OpenOrFocus(this, 'help');">Open</a>

在Chrome和IE中运行良好,遗憾的是Firefox默认情况下禁用了“提升”代码窗口的选项 focus() 在该浏览器中没有任何效果 - 找不到任何解决方法。

测试用例可在此处获得: http://jsfiddle.net/yahavbr/eVxJX/


2
2017-12-28 14:55



@richard:什么浏览器?它也发生在jsfiddle样本中吗? - Shadow Wizard
中的例子 jsfiddle.net/yahavbr/eVxJX 适用于chome而不是firefox,如上所述。将重新测试,即返回工作时。 - ctrl-alt-delor
用ie6测试并且不起作用。 - ctrl-alt-delor


这是使用jQuery和HTML5的一种方法,用于禁用JavaScript的客户端的后备。它会在每次点击时重新加载页面。经过测试,适用于Firefox和Chrome。

<script>
    $(document).ready(function() {
        $('a[data-popup]').click(function(event) {
            event.preventDefault();
            window.open(this.href, this.dataset['popup'], 'resizable,scrollbars').focus();
        });
    });
</script>

<a href="https://stackoverflow.com/" target="_blank" data-popup="stackoverflow">Stack Overflow</a>
<a href="https://superuser.com/" target="_blank" data-popup="superuser">Super User</a>
<a href="https://serverfault.com/" target="_blank" data-popup="serverfault">Server Fault</a>

1
2018-05-26 12:30