Javascript window.open странное поведение в Firefox - PullRequest
3 голосов
/ 06 ноября 2008

У меня есть несколько ссылок, которые должны открываться в одном окне или вкладке. Для этого я дал окну имя, как в следующем примере кода:

<a href="#" onClick='window.open("http://somesite.com", "mywindow", "");'>link 1</a>
<a href="#" onClick='window.open("http://someothersite.com", "mywindow", "");'>link 2</a>

Это нормально работает в Internet Explorer, но Firefox всегда открывает новую вкладку / окно. Есть идеи?

Ответы [ 4 ]

14 голосов
/ 06 ноября 2008

На самом деле документация W3Schools, на которую ссылается gabriel1836 , является лишь очень кратким описанием функций.

И, как ни странно, справочник разработчика Mozilla ПРОТИВОРЕЧИЯ эта логика.

MDC / DOM / Window.open

var WindowObjectReference = window.open(strUrl, 
              strWindowName [, strWindowFeatures]); 

Если окно с именем strWindowName уже существует, тогда вместо того, чтобы открывать новое окно, strUrl загружен в существующий окно. В этом случае возвращаемое значение метода является существующим окном и strWindowFeatures игнорируется. Предоставление пустой строки для strUrl это способ получить ссылку на открытый окно по имени без изменения расположение окна. Если хотите открывать новое окно при каждом вызове window.open () , вы должны использовать специальное значение _blank для strWindowName .

Однако на странице также указано, что существует множество расширений, которые могут изменить это поведение.

Так что либо документация, которую mozilla предоставляет людям, ориентирующимся на их собственный браузер, неверна , либо что-то странное в вашей тестовой системе:)

Кроме того, ваша текущая нотация A-Href вредна для Интернета и приведет в ярость пользователей.

  <a href="http://google.com"  
     onclick="window.open( this.href, 'windowName' ); return false" >
     Text
  </a>

СУЩЕСТВЕННО лучший способ сделать это.

Многие люди инстинктивно будут ссылками «среднего щелчка», которые они хотят открыть вручную на новой вкладке, а наличие единственной ссылки в виде «#» приводит их в бешенство.

Трюк "#" - это избыточный и несколько плохой трюк, чтобы не дать странице зайти куда-то непреднамеренно, но это только из-за отсутствия понимания того, как использовать onclick

Если вы вернете <b>FALSE</b> из события щелчка, оно отменит действие по умолчанию для ссылок (действие по умолчанию - перемещение по текущей странице)

Даже лучше, чем эта запись, было бы использовать ненавязчивый JavaScript следующим образом:

 <a href="google.com" rel="external" >Text</a>

и позже

 <script type="text/javascript">
 jQuery(function($){ 
        $("a[rel*=external]").click(function(){ 
            window.open(this.href, 'newWindowName' ); 
            return false; 
        });
 }); 
 </script>
8 голосов
/ 06 ноября 2008

Функция window.open () в Javascript специально разработана для открытия нового окна, см. документация w3schools . На самом деле это звучит так, как будто IE обрабатывает вещи нестандартным образом (что неудивительно).

Если вы хотите переместить существующее местоположение на новую страницу с помощью Javascript, вам следует обратиться к функции location.replace () .

В общем, я бы порекомендовал вам разработать для Firefox, а затем исправить для IE. Firefox не только предлагает лучшие инструменты разработки, но и его реализация стандартов W3C имеет тенденцию быть более правильной.

6 голосов
/ 06 ноября 2008

По умолчанию FF использует новую вкладку, если размеры не указаны в параметрах window.open. Вам необходимо добавить размеры для нового окна браузера.

Попробуйте это:

<a href="#" onClick='window.open("http://somesite.com", "mywindow", "width=700", "height=500");'>link 1</a>
2 голосов
/ 03 июля 2009

Почему бы вам просто не использовать простой HTML как

<a href="http://www.google.com" target="my_window_tab_frame_or_iframe">Link</a>

вместо использования JavaScript?

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