Force window.open() для создания новой вкладки в хроме

Я использую window.open для заполнения нового окна с различным содержимым. В основном отчеты и хранимые HTML файлы из автоматизированных процессов.

Я заметил очень несовместимое поведение с Chrome относительно window.open().

Некоторые мои вызовы создадут новую вкладку (предпочтительное поведение) и некоторые всплывающие окна.

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

page_content - это обычный HTML-код из вызовов AJAX. Отчеты содержат некоторую информацию в заголовке, например заголовке, значке и некоторых таблицах стилей.

В IE9 код вызывает новую вкладку вместо всплывающего окна, в то время как Chrome категорически отказывается отображать содержимое, о котором идет речь, на новой вкладке. Поскольку контент - это важные бизнес-данные, я не могу опубликовать его здесь. Я отвечу на вопросы, если смогу.

Я знаю, что некоторые люди скажут, что это поведение остается за пользователем, но это внутренняя бизнес-платформа. У нас нет времени обучать всех пользователей тому, как управлять всплывающими окнами, и нам просто нужно, чтобы они были на новой вкладке. Heck, даже новое окно было бы предпочтительнее всплывающего окна, так как вы не можете прикрепить всплывающее окно в Chrome. Не говоря уже о том, что ни один из блоков блокировки всплывающих окон не повлияет на него.

Цените любое понимание.

Ответ 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';
    });
});

Ответ 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

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

Укажите "_newtab". Это работает в IE и FF, и должно работать в Chrome. Но если у пользователя есть настройки, которые нельзя открыть в новой вкладке, вы не можете сделать это.

Ответ 4

Очень просто, чтобы заставить Chrome открываться на новой вкладке, используйте событие onmouseup

onmouseup="switchMenu(event);"