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);"