Не могу сделать редирект в JS
Весем привет! Есть проблема. У меня есть следующий код
var bob=window.open("",'_blank'); bob.location="/users/view/"+id; он работает везде кроме Safari. Если кто сталкивался с такой проблеммой то может подскажите? |
Всё там работает. Просто сафари по умолчанию не даёт открывать окна джаваскриптом.
|
Он мне просто выдает ошибку:(
|
выдаёт ошибку потому что:
var bob=window.open("",'_blank'); создаём окно, Сафари его не даёт создать скриптом -> bob = undefined bob.location="/users/view/"+id; у undefined нет свойтва location :) |
а какк же тогда решить этот вопрос?
|
var bob=window.open("",'_blank'); if (bob) bob.location="/users/view/"+id; |
Хм, дело в том что мне надо отсылать открывать окно всегда и поэтому такой подход не совсем удачен, потому как всеравно он не решает проблемы Safari. Но и на этом Большое Спасибо
|
alpar_andr,
Ну решить "проблему" Safari, может только сам Safari. Так что нужно проверять возможность открытия окна и в случае если открыть невозможно выдавать сообщение о том, чтоб пользователь вручную разрешил всплывающие окна в своем браузере. Так, например, сделано на gmail. |
Если тедбе нужно не новое окно, а редирект, то лучше вместо window.open написать типо
document.write("<meta http-equiv='Refresh' content='0; url=pam.html' >"); ну или location.href="pampam.html"; |
вобщем у меня есть чат в котором у пользователя есть возможность на каждом члене его группы просмотреть профиль этого пользователя. Я это реализовал, но увы ссылка работает только в текущем окне с помощью location.href="profile.php"; а надо чтобы открылась в другом окне. тот код который я указал выше работает везде кроме safari и не могу найти как это решить :(
|
alpar_andr,
Сделайте "заглушку" для Safari. <a href="http://link_to_profile/" target="_blank" onclick="window.open(...)">ссылка</a> Тогда в сафари будет открываться ссылка в новом окне по ссылке, в других браузерах - ваше окно по window.open(). Только возвращайте в обработчик false если неудалось открыть window.open() (как в случае заглушек для браузеров с отключенным JavaScript). |
ну могу предложить создавать динамически элемент ну например табличку с профием.. очень удобно будет.. и главное ненадо никаких дополнительных окон... и таблицку эту всегда можно будет с лёгкостью уничтожить...
приведу пример такой таблицы <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. |