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

IT技术 javascript google-chrome tabs
2021-03-03 23:36:47

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

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

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

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

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

在 IE9 中,代码确实会导致一个新选项卡而不是弹出窗口,而 Chrome 断然拒绝在新选项卡中显示有问题的内容。由于内容是敏感的商业数据,我不能在这里发布。如果可以,我会回答问题。

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

欣赏任何见解。

5个回答

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';
    });
});
var popup = window.open("about:blank", "My Page"); popup.location = 'my_page.html';
2021-05-05 23:36:47
抱歉,我的意思是如果用户的操作调用了某种 ajax 保存过程,您需要等待一个或多个 ajax 请求完成。
2021-05-06 23:36:47
您可以立即操作弹出窗口,以便在回调完成之前显示“正在处理”消息或其他内容。
2021-05-07 23:36:47
该死的,我怀疑会是这种情况(即以某种方式涉及用户交互/事件),谢谢
2021-05-11 23:36:47
@maclema:我的理解是它必须是用户操作的回调/处理程序(否则这种预防措施很容易“变通”),在这种情况下,我不知道在哪里/如何/为什么要显示这样的消息...... ? 但也许我还没有完全理解你最后的评论
2021-05-17 23:36:47

你可以试试这个:

<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。但是,如果用户将内容配置为不在新选项卡中打开,那么您无能为力。

_newtab 在 Chrome 中什么也不做。
2021-04-22 23:36:47
此外,我检查了 Chrome 中的设置,除非我是盲人,否则我找不到您在哪里设置任何控制链接打开方式的内容。
2021-05-20 23:36:47