Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   как открыть новую вкладку? (https://javascript.ru/forum/events/30398-kak-otkryt-novuyu-vkladku.html)

trololo 02.08.2012 23:16

как открыть новую вкладку?
 
после определённых действий пользователя, нужно открыть ссылку на другой ресурс в новой вкладке. window.open не открывает, или пытается открыть но браузер блочит. смотря где тестить. с location.href вообще вроде не получится такое.. пытался ещё так
var a=document.createElement('a');
a.href="site.com"
a.target="_blank";
document.body.appendChild(a);
a.click();

тоже не получается.. есть ли ещё способы отправить пользователя на другой сайт но в новой вкладке?

Deff 02.08.2012 23:20

Цитата:

Сообщение от trololo
window.open

trololo,
Кликните не выпендриваясь ссылку с нужным адресом

ссылку просто вставьте в страницу заранее и скройте display:none

melky 02.08.2012 23:23

да, вроде бы, не блочит. а что будет открываться - вкладка, или окно - решает только сам браузер.
погуглим? <a href="http://google.ru/?q=FOOBAR">готов!</a>(нажать)
<script>
document.body.onclick = function (e) {
	open( (e ? e.target:window.event.srcElement).href );
};
</script>

Dim@ 02.08.2012 23:25

melky,
скажи что это за х**ня?:D :blink: :blink:

melky 02.08.2012 23:31

Цитата:

Сообщение от Dim@ (Сообщение 194120)
melky,
скажи что это за х**ня?:D :blink: :blink:

там написано, что это такое

Deff 02.08.2012 23:34

<script type="text/javascript">
function Zz(){
document.getElementById('Open').click();
}
</script>


<a id="Open" style="display:none"  href="http://htmlbook.ru/css/table-layout" target="_blank">0</a>
<input type="button" value="Click" onclick="Zz()">

Dim@ 02.08.2012 23:39

melky,
окей, а каким хреном работает обфусцированный скрипт?:blink: :blink:

trololo 03.08.2012 00:03

Цитата:

Сообщение от Deff (Сообщение 194117)
trololo,
Кликните не выпендриваясь ссылку с нужным адресом

ссылку просто вставьте в страницу заранее и скройте display:none

нет, просто не выпендриваясь не катит.. примерное следующая последовательность происходит:

пользователь нажимает на определённый элемент, отправляется ajax запрос, в onreadystatechange вызывается другой метод, в котором окно confirm и вот тут в зависимости от того что выберет пользователь ok/cancel, должна открыться ссылка в новой вкладке. типа if(confirm('okay?')){ открываем }

Deff 03.08.2012 00:05

Цитата:

Сообщение от trololo
в onreadystatechange вызывается другой метод, в котором окно confirm и вот тут в зависимости от того что выберет пользователь ok/cancel, должна открыться ссылка в новой вкладке. типа if(confirm('okay?')){ открываем }

trololo,
Вот тогда и кликаешь

document.getElementById('Open').click();

trololo 03.08.2012 00:07

Цитата:

Сообщение от Dim@ (Сообщение 194125)
melky,
окей, а каким хреном работает обфусцированный скрипт?:blink: :blink:

для браузера не важно читабелен ли код, вот сегодня как раз читал об этом http://habrahabr.ru/post/112530/. есть и по жестче обфускация и ничего - справляется. хотя меня больше интересует вопрос в скорости работы такого скрипта..

trololo 03.08.2012 00:11

Цитата:

Сообщение от Deff (Сообщение 194133)
trololo,
Вот тогда и кликаешь

document.getElementById('Open').click();

а разве у меня в первом посте не тоже самое написано?) кажись те же действия я уже пробовал..

Deff 03.08.2012 00:17

trololo,
1. Создать заранее элемент на странице и скрыть
2. Кликать кады нужно программно
3. Как у Вас - не всматривался
===================================
В Примере - кроссбраузерность проверили ?

trololo 03.08.2012 00:21

Цитата:

Сообщение от Deff (Сообщение 194140)
trololo,
1. Создать заранее элемент на странице и скрыть
2. Кликать кады нужно программно
3. Как у Вас - не всматривался
===================================
В Примере - кроссбраузерность проверили ?

нет, кроссбраузерность как-то всегда уже потом допиливаю.. у меня та же последовательность, за исключением того, что элемент создаётся не «заранее», а уже после согласия перейти по ссылке. хз может в этом и причина.. сейчас попробую.

vadim5june 03.08.2012 00:29

Цитата:

Сообщение от trololo (Сообщение 194144)
нет, кроссбраузерность как-то всегда уже потом допиливаю.. у меня та же последовательность, за исключением того, что элемент создаётся не «заранее», а уже после согласия перейти по ссылке. хз может в этом и причина.. сейчас попробую.

Новую вкладку можно открыть только после клика юзера-чисто програмно нельзя

trololo 03.08.2012 00:31

var a=document.createElement('a');
a.href='http://google.com';
a.id='tmpLink';
a.target='_blank';
a.innerHTML='0';
a.onclick=function(){ //  добавил чтобы посмотреть вызовется ли
document.title='clicked'; // титл меняется. то есть клик происходит.
} // но ссылка по прежнему не открывается..
with(a.style)
display='none';
document.body.appendChild(a);
		
if(confirm('ok?')){
document.getElementById('tmpLink').click();
}

Deff 03.08.2012 00:36

trololo,
Вы можете тупо вставить тег на страницу - не скриптом ??? - Я же выложил код - из скрипта ток програмный клик и, если надо, - замена ссылки

trololo 03.08.2012 00:46

Цитата:

Сообщение от Deff (Сообщение 194154)
trololo,
Вы можете тупо вставить тег на страницу - не скриптом ??? - Я же выложил код - из скрипта ток програмный клик и, если надо, - замена ссылки

к сожалению нет. всё сделать нужно именно программно. не судьба видимо открывать в новой вкладке..

Deff 03.08.2012 00:50

trololo,
Цитата:

Сообщение от trololo
к сожалению нет. всё сделать нужно именно программно. не судьба видимо открывать в новой вкладке..

Тогда создайте скрытый дiв блок и аррenChildom - воткните рекомендуемый тег

<!DOCTYPE html PUBLIC>
<html>
<head>
<body>

<script type="text/javascript">
//Tyт функция, которую вызываем по требованию в вашем скрипте
function Zz(){
     document.getElementById('Open').click();
}
var a='<a id="Open" style="display:none"  href="http://htmlbook.ru/css/table-layout" target="_blank">0</a>\
<input type="button" value="Click" onclick="Zz()">';
var newDiv = document.createElement('div');
newDiv.className = 'my-class'
//newDiv.style.display = 'none' //cкрытие кнопки
newDiv.id = 'my-id'
newDiv.innerHTML=a;

document.body.appendChild(newDiv);
</script>

</body>
</html>

trololo 03.08.2012 01:41

вот так вот уже, получается «запустить ссылку»
var div=document.createElement('div');
div.style.display='none';
div.innerHTML='<a id="tmpLink" href="http://google.com" target="_blank">ok</a>';
document.body.appendChild(div);
if(confirm('?')){
document.getElementById('tmpLink').click();
}
вот только target="_blank" не учитывается почему-то.. даже не так, он учитывается и если этот атрибут присутствует в ссылке то ничего не открывается вообще, а если его убрать то ссылка открывается. жесть вообще.. или я уже не соображаю, так как время позднее.

Deff 03.08.2012 02:09

trololo,
Попробуйте скрипт поставить на чистую тестовую страницу

<!DOCTYPE html PUBLIC>
<html>
<head>
<body>

<script type="text/javascript">
var div=document.createElement('div');
div.style.display='none';
div.innerHTML='<a id="tmpLink" href="http://google.com" target="_blank">ok</a>';
document.body.appendChild(div);
if(confirm('?')){
document.getElementById('tmpLink').click();
}

</script>

</body>
</html>

FF все одно блокирет все ссылки созданные скриптом -

Занчит выход:
Находите на странице любую, имеющуюся на исходнике станицы ссылку с таргет и при возникновении Ваших условий - заменяете href на нужный и кликаете программно

Deff 03.08.2012 02:44

<script type="text/javascript">
function Zz(){
var a = document.getElementById('Open');
a.href='http://google.com';
a.click();
}
</script>


<a id="Open" style="display:none"  href="http://htmlbook.ru/css/table-layout" target="_blank">0</a>
<input type="button" value="Click" onclick="Zz()">

trololo 03.08.2012 08:56

Цитата:

Сообщение от Deff (Сообщение 194188)
<script type="text/javascript">
function Zz(){
var a = document.getElementById('Open');
a.href='http://google.com';
a.click();
}
</script>


<a id="Open" style="display:none"  href="http://htmlbook.ru/css/table-layout" target="_blank">0</a>
<input type="button" value="Click" onclick="Zz()">

во всех примерах у Вас вызывается Zz() после нажатия на кнопку, но дело в том, что с таким раскладом всё работает, а если Zz() вызывать в
if(confirm('?')){
Zz();
}
то тут и начинается магия, ссылка открывается, только если убрать target="_blank".. и такое творится даже с уже существующими ссылками, которые созданы не программно.

Deff 03.08.2012 10:32

trololo,
Возможны траблы из-за модального Окна confirm
<style type="text/css"> /* Вариант нового Стиля */
    #confirm{
    background:#F7F7F7;
    border:1px solid red;
    padding:12px;
    width:200px;
    height:100px;
    position:fixed;
    z-index:100;
    left:50%;
    top:20%;
    margin-left:-100px;
    border-radius:15px;
    -webkit-border-radius:15px;
    -khtml-border-radius:15px;
    -moz-border-radius:15px;
    -o-border-radius:15px;
    -ms-border-radius:5px;

    box-shadow: 0px 5px 18px #000;
    -webkit-box-shadow:0px 5px 18px #000;
    -khtml-box-shadow:0px 5px 18px #000;
    -moz-box-shadow:0px 5px 18px #000;
    -ms-box-shadow:0px 5px 18px #000;
    }
</style>
<div id="confirm" style="display:none;">
<a id="Open" style="display:none"  href="http://htmlbook.ru/css/table-layout" target="_blank">0</a>
Тут Ваше Извещение
Вы Готовы ?<br>
<p style="float:right;margin-top:40px;">
<input type="button" value="Да" onclick="Zz();gloseConfirm()"> <input type="button" value="Отмена" onclick="gloseConfirm()">
</p></div>

<script type="text/javascript">

function gloseConfirm(){
  document.getElementById('confirm').style.display='none';
}

function Zz(){
  var a = document.getElementById('Open');
  a.href='http://google.com';
  a.click();
}
if(true) { 
   document.getElementById('confirm').style.display='block';
}
</script>



Гы - Вывод - не делайте Переход с Вызовом confirm:
Поставьте разворачивающийся div c Вашим вопросом - и по нажатию в нем кнопки - переход

vadim5june 03.08.2012 12:18

Цитата:

Сообщение от Deff
по нажатию в нем кнопки - переход

лучше вместо кнопки сделать ссылку стилизованную под кнопку
<style>
.a_but{display:block;width:50px;height:20px;
background:rgba(200,200,200,1);text-decoration:none; border-radius:5px;}
</style>
<a class=a_but href='http://javascript.ru' target=_blank>да</a>

Deff 03.08.2012 12:19

Цитата:

Сообщение от vadim5june
Лучше вместо кнопки сделать ссылку

Ну или кнопку воткнуть в ссылку

trololo 03.08.2012 13:56

ха, да вот это я протупил. действительно можно ведь отрисовать своё окно)) спс, посоны.

Влад31/08/2000 17.08.2012 19:37

<a href="анкор" target="_blank" >Text сылки</a> и все дела

vadim5june 17.08.2012 20:05

Цитата:

Сообщение от Влад31/08/2000 (Сообщение 198333)
<a href="анкор" target="_blank" >Text сылки</a> и все дела

ему диалоговое окно типа confirm нужно с выбором


Часовой пояс GMT +3, время: 10:39.