Заставьте window.open() создать новую вкладку в Chrome

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

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

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

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

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

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

Я знаю, что некоторые люди скажут, что это поведение оставлено на усмотрение пользователя, но это внутренняя бизнес-платформа. У нас нет времени обучать всех пользователей тому, как управлять всплывающими окнами, и нам просто нужно, чтобы это было на новой вкладке. Черт возьми, даже новое окно будет предпочтительнее всплывающего окна, поскольку вы не можете закрепить всплывающее окно в 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';
    });
});

Вы можете попробовать это:

<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. Если открытие новой вкладки происходит от действия пользователя (например, щелчка мыши), это будет работать без проблем. Но если код выполняется в другом блоке скрипта, вам может потребоваться включить всплывающие окна в 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;

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

onmouseup="switchMenu(event);"

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

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

Другие вопросы по тегам