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

时间:2012-08-17 04:35:28

标签: javascript google-chrome tabs

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

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

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

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

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

在IE9中,代码确实会生成新标签而不是弹出式广告,而Chrome则严格拒绝在新标签中显示相关内容。由于内容是敏感的商业数据,我无法在此发布。如果可以,我会回答问题。

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

欣赏任何见解。

5 个答案:

答案 0 :(得分:40)

必须在回调中调用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';
    });
});

答案 1 :(得分:3)

你可以试试这个:

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

答案 2 :(得分:0)

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

onmouseup="switchMenu(event);"

答案 3 :(得分:0)

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

stage('Notifications Receiver (dev)') {
      steps {
        script {
            taskDefinitionFamily = "mis-core-dev-notifications-receiver"
            taskDefinition = "mis-core-dev-notifications-receiver-a"
            taskFilterName = "mis-core-dev-notifications-receiver-"
            tasksGroup = "mis-core-dev-notifications-receiver-a,mis-core-dev-notifications-receiver-b"
            if (params.notificationsReceiver.contains('Stop Task')) {
            build(job: 'Stop ECS Task (utility)',
            parameters: [
            string(name: 'region', value: params.region),
            string(name: 'cluster', value: params.cluster),
            string(name: 'family', value: taskDefinitionFamily)
            ])
          }
            else if (params.notificationsReceiver.contains('Start Task')) {
            build(job: 'Start ECS Task (utility)',
            parameters: [
            string(name: 'region', value: params.region),
            string(name: 'cluster', value: params.cluster),
            string(name: 'taskDefinition', value: taskDefinition),
            string(name: 'containerInstanceIds', value: params.containerInstanceIdsToStartOn)
            ])
          }
            else if (params.notificationsReceiver.contains('Restart Task')) {
            build(job: 'Hot Reload (utility)',
            parameters: [
            string(name: 'region', value: params.region),
            string(name: 'cluster', value: params.cluster),
            string(name: 'taskFilterName', value: taskFilterName),
            string(name: 'tasksGroup', value: tasksGroup),
            string(name: 'containerInstanceIdsToStartOn', value: params.containerInstanceIdsToStartOn)
            ])
          }
            else if (params.notificationsReceiver == null || params.notificationsReceiver == "") {
            echo "Did you forget to check a box?"
          }
        }
      }
    }

答案 4 :(得分:-1)

window.open('page.html', '_newtab');

指定'_newtab'。这适用于IE和FF,应该可以在Chrome中使用。但是,如果用户将某些内容配置为无法在新标签中打开,那么您可以做的不多。