如何使用JavaScript打开一个新的标签页或窗口?

4

目标

我想以与target="_blank"相同的方式在新的选项卡/窗口中打开一个URL。

代码

我正在使用一个PHP条件,触发以下JavaScript:

<script type="text/javascript">
window.open ("http://www.google.com/","_blank", "status=1,toolbar=1");
</script>

我的问题

window.open和target="_blank"超链接不同

  1. 它会受到弹出窗口拦截器的影响。
  2. 窗口需要设置参数来模仿target="_blank"的效果。
  3. 一旦JavaScript运行,容器文档中某些字体颜色会丢失。

我的疑问

如何精确地模拟target="_blank"的效果?


3
现在的弹窗拦截程序会检查操作是否是“用户主动发起”的,否则就会阻止它。 - LoveAndCoding
可能是重复问题:https://dev59.com/hnI_5IYBdhLWcg3wAd82 - Travis J
@Ktash:代码如何才能变成“用户启动”?模拟 .click 事件是否有意义? - Dominor Novus
@Travis J:谢谢,但我已经看过那个问题了。它没有考虑到我概述的第一个差异。 - Dominor Novus
@Ktash:根据单选按钮的选择,用户点击提交按钮,触发 PHP 验证,产生 JavaScript 打开/重定向。这里能做些什么吗? - Dominor Novus
显示剩余2条评论
1个回答

1

不要使用JavaScript打开窗口,而是使用JavaScript更新链接的href,然后触发链接的点击。这样,您将获得与用户单击链接完全相同的行为。

在页面上添加一个带有id和target="_blank"的链接。当您想要打开一个新窗口时,更新此链接的href,然后触发点击,就像这样(来自这里)。

function clickLink(link) {
var cancelled = false;

if (document.createEvent) {
    var event = document.createEvent("MouseEvents");
    event.initMouseEvent("click", true, true, window,
        0, 0, 0, 0, 0,
        false, false, false, false,
        0, null);
    cancelled = !link.dispatchEvent(event);
}
else if (link.fireEvent) {
    cancelled = !link.fireEvent("onclick");
}

if (!cancelled) {
    window.location = link.href;
}
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接