Заставьте 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. Но если у пользователя есть настройки, которые не открываются в новой вкладке, то вы мало что можете сделать.