Какое лучшее легкое ненавязчивое решение для открытия любой ссылки во всплывающем окне нестандартного размера? - PullRequest
3 голосов
/ 13 февраля 2010

Какое лучшее легкое ненавязчивое решение для открытия любой ссылки во всплывающем окне нестандартного размера с помощью кнопки «Закрыть»?

Редактировать 3:

  • и если JavaScript отключен ссылка должна быть открыта в новой вкладке / окне как любая обычная страница.
  • Всплывающее окно должно быть открыто вертикально и горизонтально по центру на любом разрешении экрана (я заметил всплывающее окно некоторых сайтов в сети при настройке двойного монитора, всплывающее окно открывается на втором мониторе) и без всей панели инструментов, адресная строка и т. д.
  • высота всплывающего окна должна зависеть от содержание, не зафиксировано

Я не хочу использовать какой-либо плагин, чтобы получить этот эффект, просто нужен простой и меньший код, для которого нужен только файл библиотеки jquery

как это

альтернативный текст http://easycaptures.com/fs/uploaded/244/4705598517.jpg

Редактировать : Я не спрашиваю о "модальном окне" и "лайтбоксе"

Редактировать 2:

Если js отключен, всплывающее окно должно быть открыто в новом окне, а также должен быть изменен «заголовок» ссылки

вот так : содержимое будет белым цветом.

<a href="http://stackoverflow.com" Title="Opens in a new pop-up" target="_blank">

в это

<a href="http://stackoverflow.com" Title="Opens in a new window" target="_blank">

и можно ли заставить работать кнопку "закрыть окно", даже если JS отключен.

Ответы [ 3 ]

1 голос
/ 13 февраля 2010

Не думаю, что это вообще хорошая идея, но подойдет.

О, вы не можете центральное окно, таким образом, это зависит от ОС.

Редактировать : Когда Пекка предупредил меня, вы можете установить свою позицию, поэтому улучшенное (непроверенное) решение:
Редактировать 2 : отредактировано так, как хотел спрашивающий, а также то, на что указал Бобинс - $this не существует

<a id="close" href="your-link" target="_blank" title="opens in a new window">close</a>

и

$(document).ready(function(){
    $("#close").attr('title','opens in a new pop-up'); //set new title

    $("#close").click(function(){ //click action
        w = parseInt((screen.width - 600)/2); h = parseInt((screen.height - 400)/2);
        cwin = window.open($(this).attr('href'), 'closewin',
       'status=0,toolbar=0,location=0,menubar=0,directories=0,resizable=0,scrollbars=0,height=400,width=600');
        cwin.moveTo(w,h);
        return false;
    });
});

К сожалению, я не знаю, как установить высоту на основе содержимого, для этого потребуются дополнительные вычисления.

1 голос
/ 13 февраля 2010

Первый шаг - это запасной вариант, когда скрипт отключен, используя атрибут target, чтобы открыть страницу в новом окне или новой вкладке:

<a href="page.html" target="_blank">page</a>

Затем вы можете добавить скрипт для обработки события клика:

<a href="page.html" target="_blank" onclick="window.open(this.href,this.target,'width=200,height=300');return false;">page</a>

Вместо этого вы можете использовать jQuery, чтобы применить событие к нужным ссылкам, например, применить его ко всем ссылкам с помощью class="popup":

$(function(){
  $('a.popup').click(function(e){
    window.open(this.href,this.target,'width=200,height=300');
    e.preventDefault();
  });
});

Вы можете добавить дополнительные значения в строку объектов, например, location=0,menubar=0,status=0,toolbar=0, чтобы попытаться удалить панели инструментов и тому подобное из окна. Однако поддержка этого зависит от браузера, и местоположение, как правило, скрыть невозможно.

Вы также можете попытаться получить разрешение экрана и рассчитать координаты для центрирования всплывающего окна, используя значения top=...,left=.... Получение разрешения экрана зависит от браузера, поэтому вы можете применять его, только если оно доступно.

Чтобы получить кнопку закрытия во всплывающем окне, вам нужна прокси-страница, которая может открыть страницу в фрейме. Тогда код становится немного длиннее, конечно:

$(function(){
  $('a.popup').click(function(e){
    var w = window.open('',this.target,'width=200,height=300')
    w.document.open();
    w.document.write(
      '<html>'+
      '<head>'+
      '<style>'+
      'iframe { border: none; height: 250px; }'+
      'a { float: right; padding: 10px; }'+
      '</style>'+
      '</head>'+
      '<body>'+
      '<iframe src="'+this.href+'"></iframe>'+
      '<a href="javascript:window.close();">Close</a>'+
      '</body>'
    );
    w.document.close();
    e.preventDefault();
  });
});
0 голосов
/ 13 февраля 2010

Вы ищете что-то вроде JQuery UI Dialog ?

Демо здесь .

Я бы не рекомендовал «настоящие» всплывающие окна (то есть отдельные окна браузера), потому что они имеют тенденцию блокироваться все больше и больше и не могут быть полностью стилизованы (IE> 7, а FF заставит адресная строка на всплывающее окно в целях безопасности).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...