【问题标题】:Force window.open() to create new tab in chrome强制 window.open() 在 chrome 中创建新标签
【发布时间】:2012-08-13 13:12:57
【问题描述】:

我使用 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('data:text/html,' + escape(page_content))?编辑:刚试过,不。

标签: javascript google-chrome tabs


【解决方案1】:

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';
    });
});

【讨论】:

  • 该死的我怀疑会是这种情况(即用户交互/事件以某种方式涉及),谢谢
  • 您可以立即操作弹出窗口,以便在回调完成之前显示“处理中”消息或其他内容..
  • @maclema:我的理解是它必须是用户操作的回调/处理程序(否则这种预防措施很容易“变通”) ,在那种情况下,我看不出你会在哪里/如何/为什么要显示这样的消息......?但也许我还不太明白你的最后评论
  • 抱歉,我的意思是如果用户的操作调用了某种 ajax 保存过程,您需要等待一个或多个 ajax 请求完成。
  • var popup = window.open("about:blank", "My Page"); popup.location = 'my_page.html';
【解决方案2】:

你可以试试这个:

<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>

【讨论】:

    【解决方案3】:

    很简单,为了强制 Chrome 在新标签页中打开,使用 onmouseup 事件

    onmouseup="switchMenu(event);"

    【讨论】:

      【解决方案4】:

      我已经尝试过了,它在 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;
      

      【讨论】:

        【解决方案5】:
        window.open('page.html', '_newtab');
        

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

        【讨论】:

        • _newtab 在 Chrome 中什么都不做。
        • 另外,我检查了 Chrome 中的设置,除非我是盲人,否则我找不到您设置任何控制链接打开方式的设置。
        猜你喜欢
        • 1970-01-01
        • 2015-08-24
        • 1970-01-01
        • 2011-10-29
        • 1970-01-01
        • 1970-01-01
        • 2019-07-02
        • 2015-03-27
        • 1970-01-01
        相关资源
        最近更新 更多