Проверьте, включен ли блокировщик всплывающих окон при открытии новой вкладки
Я хочу открыть новое окно в новом процессе / контексте в Chrome, (я не уверен, если это возможно с window.open, но в следующем примере это работает) в настоящее время, если это было обычное окно, вы можете проверить с помощью следующего примера и посмотреть, если блокировщик всплывающих окон включен
ar newWin = window.open(url);
if(!newWin || newWin.closed || typeof newWin.closed=='undefined')
{
//POPUP BLOCKED
}
но я хочу открыть новое окно в новом процессе без window.open, как показано ниже
var prod = document.getElementById("myElement");
var aTag = document.createElement('a');
aTag.setAttribute('href',"http://cnn.com");
//THIS TWO LINES do the job
aTag.setAttribute('rel',"noreferrer");
aTag.setAttribute('target',"_blank");
prod.appendChild(aTag);
aTag.click();
prod.removeChild(aTag);
используется с этой ссылкой: http://news.softpedia.com/news/Force-Google-Chrome-to-Open-Links-in-New-Processes-128962.shtml
из поста, чтобы открыть новую вкладку в новом контексте, вы должны использовать:
aTag.setAttribute('rel',"noreferrer");
aTag.setAttribute('target',"_blank");
Хотя это работает, иногда новое окно / вкладка блокируется с помощью всплывающего окна, я просто хочу знать это и внутренне информировать пользователя о том, что новое окно заблокировано, и, пожалуйста, включите его... какой вариант у меня есть?
Мои требования таковы:
- Открыть окно в новом процессе / контексте
- если блокировщик всплывающих окон заблокирован, сообщите пользователю
Как это можно сделать?
ОБНОВИТЬ
Мне это нужно, потому что, когда вы нажимаете, чтобы открыть новое окно из существующего окна, и открывается второе окно, и вы возвращаетесь к первому / исходному окну, и вы хотите сделать что-то, что оно заблокировано!
Чтобы смоделировать это, вы можете создать этот простой файл
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>BlockTAB</title>
</head>
<br/>
<br/>
<button onclick="windowOpen('http://cnn.com')">window open native</button>
<br/>
<br/>
<button onclick="windowOpen('http://google.com')">sample</button>
<script>
function windowOpen(url){
window.open(url);
}
</script>
</html>
Теперь сделайте следующее
- Запустите программу (html-файл), откройте вкладку CNN.
- осмотрите вкладку CNN и установите на ней точку останова (во вкладке источника вы можете найти javascript, поместите его в любое место по вашему выбору), пока он не остановится (вам нужно обновить страницу, пока вы не увидите, что отладчик останавливается...
- Теперь вернитесь на первую вкладку, где были две кнопки, и вы видите, что она заблокирована, вы не можете делать что-либо вроде щелчка и т. Д.
Как обработать открыть новую вкладку, не блокируя первую / исходную вкладку?
ОБНОВЛЕНИЕ 2
Есть способ симулировать блокировку всплывающих окон, если это не происходит с кодом с
aTag.setAttribute('отн',"noreferrer"); aTag.setAttribute('цель',"_blank");
добавить этот следующий код предыдущий пример
<script src="https://cdn.jsdelivr.net/bluebird/3.4.5/bluebird.js"></script>
<br/>
<br/>
<button onclick="EnabledPPB('http://cnn.com')">Blocker</button>
function delayFN(url) {
Promise.delay(500)
.then(function() {
var newWin = window.open(url);
})
}
function EnabledPPB(url) {
Promise.delay(100)
.then(function() {
delayFN(url);
})
}
1 ответ
Не уверен, что вы хотите обязательно открыть новое окно или новый процесс, поэтому, возможно, я отвечу на оба.
Если вы буквально подразумеваете, что хотите убедиться, что Chrome запускает новый процесс, в Javascript нет способа сделать это, даже код, который вы показывали window.open
, Однако, поскольку Chrome открывает новый процесс для каждой вкладки, можно предположить, что ваше сообщение находится в новом процессе, пока ваш пользователь использует Chrome. С другой стороны, можно проверить, какой браузер использует ваш пользователь. Хотя ваш пользователь все еще может подделать пользовательский агент (т.е. браузер), этого должно быть достаточно для внутреннего использования.
Больше ссылок на Chrome с использованием нового процесса вместо нового потока для каждой вкладки.
Если вы хотите убедиться, что ваш пользователь открывает ваше сообщение в новом окне, то window.open
это единственный вариант. Вы можете вызвать window.open
добавив прослушиватель событий или просто используйте onclick
атрибут в HTML. Нет никакого способа сделать только с HTML, и не должно быть никаких оснований для поиска ответа, когда вы уже нашли способ сделать это с помощью javascript?