Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не могу сделать редирект в JS (https://javascript.ru/forum/misc/1836-ne-mogu-sdelat-redirekt-v-js.html)

alpar_andr 23.09.2008 16:21

Не могу сделать редирект в JS
 
Весем привет! Есть проблема. У меня есть следующий код

var bob=window.open("",'_blank');
bob.location="/users/view/"+id;

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

ZoNT 23.09.2008 16:31

Всё там работает. Просто сафари по умолчанию не даёт открывать окна джаваскриптом.

alpar_andr 23.09.2008 16:37

Он мне просто выдает ошибку:(

ZoNT 23.09.2008 16:56

выдаёт ошибку потому что:
var bob=window.open("",'_blank');

создаём окно, Сафари его не даёт создать скриптом -> bob = undefined
bob.location="/users/view/"+id;

у undefined нет свойтва location
:)

alpar_andr 23.09.2008 17:33

а какк же тогда решить этот вопрос?

ZoNT 23.09.2008 17:42

var bob=window.open("",'_blank');
if (bob) bob.location="/users/view/"+id;

alpar_andr 23.09.2008 18:06

Хм, дело в том что мне надо отсылать открывать окно всегда и поэтому такой подход не совсем удачен, потому как всеравно он не решает проблемы Safari. Но и на этом Большое Спасибо

Андрей Параничев 23.09.2008 20:29

alpar_andr,
Ну решить "проблему" Safari, может только сам Safari. Так что нужно проверять возможность открытия окна и в случае если открыть невозможно выдавать сообщение о том, чтоб пользователь вручную разрешил всплывающие окна в своем браузере. Так, например, сделано на gmail.

SunnyDay 24.09.2008 02:27

Если тедбе нужно не новое окно, а редирект, то лучше вместо window.open написать типо
document.write("<meta http-equiv='Refresh' content='0; url=pam.html' >");
ну или
location.href="pampam.html";

alpar_andr 25.09.2008 21:50

вобщем у меня есть чат в котором у пользователя есть возможность на каждом члене его группы просмотреть профиль этого пользователя. Я это реализовал, но увы ссылка работает только в текущем окне с помощью location.href="profile.php"; а надо чтобы открылась в другом окне. тот код который я указал выше работает везде кроме safari и не могу найти как это решить :(

Андрей Параничев 25.09.2008 22:06

alpar_andr,
Сделайте "заглушку" для Safari.
<a href="http://link_to_profile/" target="_blank" onclick="window.open(...)">ссылка</a>

Тогда в сафари будет открываться ссылка в новом окне по ссылке, в других браузерах - ваше окно по window.open(). Только возвращайте в обработчик false если неудалось открыть window.open() (как в случае заглушек для браузеров с отключенным JavaScript).

magistr_bender 25.09.2008 22:31

ну могу предложить создавать динамически элемент ну например табличку с профием.. очень удобно будет.. и главное ненадо никаких дополнительных окон... и таблицку эту всегда можно будет с лёгкостью уничтожить...
приведу пример такой таблицы
<head>
  <title></title>
  <style>
  #vjt-table-top{
    background-image: url(skins/standart/images/22.png); background-repeat: repeat-x; width: 100%
  }
  #vjt-table-left{
    background-image: url(skins/standart/images/25.png); background-repeat: repeat-y; height: 200px
  }
  #vjt-table-right{
    background-image: url(skins/standart/images/26.png); background-repeat: repeat-y
  }
  #vjt-table-bottom{
    background-image: url(skins/standart/images/27.png); background-repeat: repeat-x
  }
  #vij-table{
    width: 500px
  }
  #vij-table-ie{
    cellpadding: 0px; cellspacing: 0px; padding: 0 0 0 0; margin: 0 0 0 0;
  }
  .vjt-img{
    border: 0;
  }


  </style>
</head>

<body>
<input type="submit" value="Create" name="create" onclick="create_elem()" />
<input type="submit" value="Destroy" name="destroy" onclick="destroy_elem()" />
<script language="JavaScript" type="text/javascript">
var moveState = false;

var x0, y0;
var divX0, divY0;
function defPosition(event) {
    var x = y = 0;
    if (document.attachEvent != null) { // Internet Explorer & Opera
        x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
        y = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
    }
    if (!document.attachEvent && document.addEventListener) { // Gecko
        x = event.clientX + window.scrollX;
        y = event.clientY + window.scrollY;
    }
    return {x:x, y:y};
}

function initMove(div, event) {

    var event = event || window.event;
    x0 = defPosition(event).x;
    y0 = defPosition(event).y;
    divX0 = parseInt(div.style.left);
    divY0 = parseInt(div.style.top);
    moveState = true;
}

document.onmouseup = function() {
    moveState = false;
}

function moveHandler(div, event) {
    var event = event || window.event;
    if (moveState) {
        div.style.left = divX0 + defPosition(event).x - x0;
        div.style.top  = divY0 + defPosition(event).y - y0;
    }
}


var vjtwindow;

function create_elem() {
var mdiv = document.getElementById("mdiv");
    if (!vjtwindow) {
        vjtwindow=document.createElement("table");
        vjtwindow.cellPadding = 0;
        vjtwindow.cellSpacing = 0;
        vjtwindow.id = "vij-table";
        vjtwindow.name = "vij-table";

    var newRow=vjtwindow.insertRow(0);
    var newCell = newRow.insertCell(0);
        newCell.id="vij-table-ie";
        newCell.innerHTML="<img src=\"skins/standart/images/21.png\" class=\"vjt-img\"/>";

    var newCell = newRow.insertCell(1);
        newCell.id="vjt-table-top";
        newCell.innerHTML="";

    var newCell = newRow.insertCell(2);
        newCell.id="vij-table-ie";
        newCell.innerHTML="<img src=\"skins/standart/images/24.png\" class=\"vjt-img\"/>";

    var newRow=vjtwindow.insertRow(1);
    var newCell = newRow.insertCell(0);
        newCell.id="vij-table-ie";
        newCell.innerHTML="<img src=\"skins/standart/images/29.png\" class=\"vjt-img\"/>";

    var newCell = newRow.insertCell(1);
        newCell.id="vjt-table-bottom";
        newCell.innerHTML="";

    var newCell = newRow.insertCell(2);
        newCell.id="vij-table-ie";
        newCell.innerHTML="<img src=\"skins/standart/images/28.png\" class=\"vjt-img\"/>";

    var newRow=vjtwindow.insertRow(1);
    var newCell = newRow.insertCell(0);
        newCell.id="vjt-table-left";
        newCell.innerHTML="";

    var newCell = newRow.insertCell(1);
        newCell.id="vjt-tab";
        newCell.setAttribute("vlign","top");
        newCell.innerHTML="<b>23</b>";

    var newCell = newRow.insertCell(2);
        newCell.id="vjt-table-right";
        newCell.innerHTML="";
    vjtwindow.position="absolute";
    document.getElementById("mdiv").appendChild(vjtwindow);
    }
}
function destroy_elem(){
    if (!vjtwindow) return;
    document.getElementById("mdiv").removeChild(vjtwindow);
    vjtwindow = null;
}

</script>
<div style='position:absolute; top:100px; left:100px; height: 500px; width:350px;' onmousedown = 'initMove(this, event);' onmouseup = 'moveState = false;' onmousemove = 'moveHandler(this, event);' id = 'mdiv'></div>
</body>

код работает во всех браузерах, только не оптимизирован...


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