强制 window.open() 在 chrome 中创建新选项卡

Force window.open() to create new tab in chrome

本文关键字:新选项 创建 选项 chrome window open 强制      更新时间:2023-09-26

我使用window.open来填充一个包含不同内容的新窗口。 主要是来自自动化流程的报告和存储的 HTML。

我注意到Chrome在window.open()方面有一些非常不一致的行为。

我的一些调用将创建一个新选项卡(首选行为),而有些则会导致弹出窗口。

var w = window.open('','_new');
w.document.write(page_content);

page_content只是来自 AJAX 调用的常规 HTML。 报表在标题中包含一些信息,如标题、网站图标和一些样式表。

在IE9中,代码确实会导致新标签而不是弹出窗口,而Chrome断然拒绝在新标签页中显示有问题的内容。 由于内容是敏感的业务数据,因此我无法在此处发布。 如果可以的话,我会回答问题。

我知道有些人会说这是留给用户的行为,但这是一个内部业务平台。 我们没有时间培训所有用户如何管理弹出窗口,我们只需要将其放在新选项卡中。 哎呀,即使是新窗口也比弹出窗口更可取,因为您无法在 Chrome 中停靠弹出窗口。 更不用说没有任何弹出窗口阻止代码会影响它。

欣赏任何见解。

window.open 必须在由用户操作(例如 onclick)触发的回调中调用,才能在新选项卡而不是窗口中打开页面。

例:

$("a.runReport").click(function(evt) {
    // open a popup within the click handler
    // this should open in a new tab
    var popup = window.open("about:blank", "myPopup");
    //do some ajax calls
    $.get("/run/the/report", function(result) {
        // now write to the popup
        popup.document.write(result.page_content);
        // or change the location
        // popup.location = 'someOtherPage.html';
    });
});

你可以试试这个:

<a href="javascript:openWindow();">open a new tab please</a>
<script>
    function openWindow(){
        var w = window.open("about:blank");
        w.document.write("heheh new page opened");
    }
</script>

非常简单,为了强制Chrome在新选项卡中打开,请使用onmouseup事件

onmouseup="switchMenu(event);"

我已经尝试过了,它在 chrome 中工作正常。如果在用户操作(例如鼠标单击)上打开新选项卡,这将正常工作,没有任何问题。但是,如果代码在另一个脚本块中执行,则可能需要在 chrome 中启用弹出窗口。看起来这是为了处理所有点击诱饵网站。

let newTab = window.open('', '_blank');
if (this.viewerTab == null) {
  console.log("opening in new tab to work, pop-ups should be enabled.");
  return;
}
................
newTab.location.href = viewerUrl;
window.open('page.html', '_newtab');

指定"_newtab"。 这适用于IE和FF,并且应该适用于Chrome。 但是,如果用户将内容配置为不在新选项卡中打开,那么您无能为力。