ie8 var w = window.open () - "Сообщение: неверный аргумент." - PullRequest
113 голосов
/ 02 апреля 2009

У меня есть сайт с проблемой только для IE8:

Код:

var w = window.open(urlstring, wname, wfeatures, 'false');

Ошибка:

Сообщение: неверный аргумент.
Линия: 419 Char: 5
Код: 0
URI: http://HOSTNAME/js_context.js

Я подтвердил номер строки кода («Строка» и «URI» верны), и я понимаю, что в более поздних версиях IE8 это считается точным.

Я проверил все входящие параметры в вызове, сбросив оповещения, и все они выглядят действительными.

Эта проблема не возникает на FF (вероятно, 3).

UPDATE:

Проблема заключается в использовании присваивания результата window.open () при выполнении «var w». Когда я разделяю строку на два утверждения, это работает в IE8.

ОБНОВЛЕНИЕ 2:

На основании:

http://javascript.crockford.com/code.html

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

Это не совсем то, что здесь происходит, но я обнаружил, что применение принципа решило проблему в режиме совместимости IE8.

var w = (window.open(urlstring, wname, wfeatures, false));

Ответы [ 14 ]

251 голосов
/ 23 сентября 2009

Это старая публикация, но, возможно, она еще пригодится кому-то.

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

   window.open('/somefile.html', 'a window title', 'width=300');

Проблема была в «заголовке окна», так как он недействителен. Он работал нормально со следующей строкой:

   window.open('/somefile.html', '', 'width=300');

На самом деле, внимательно прочитав, я понял, что Microsoft не поддерживает name в качестве второго аргумента. Если вы посмотрите на страницу официальной документации , вы увидите, что Microsoft допускает только следующие аргументы, если вообще использует этот аргумент:

  • _blank
  • _media
  • _parent
  • _search
  • _self
  • _top
78 голосов
/ 13 января 2010

IE требователен к аргументу имени окна. Он не любит пробелы, тире или другие знаки пунктуации.

16 голосов
/ 13 января 2011

Когда вы вызываете window.open в IE, второй аргумент (имя окна) должен быть либо одной из предопределенных target строк, либо строкой, которая имеет форму действительного идентификатора в JavaScript.

Так что работает в Firefox: «Job Directory 9463460», не не работает в Internet Explorer, и его нужно заменить на: «Job_Directory_9463460», например (без пробелов, без знаков минуса, без точек) , это должен быть действительный идентификатор).

8 голосов
/ 30 мая 2009

проблема может быть в wname, попробуйте использовать один из тех, что указаны в ссылке выше, я цитирую:

Дополнительно. Строка, которая указывает Название окна. Это имя используется в качестве значения для атрибута TARGET на форме или элементе привязки.

  • _blank SURL загружается в новое безымянное окно.
  • _media URL загружается в Media Bar в Microsoft Internet Explorer 6. Microsoft Windows XP Пакет обновления 2 (SP2) и более поздние. Эта функция больше не поддерживается. По умолчанию URL загружается в новое окно браузера или таб.
  • _parent SURL загружается в родительский элемент текущего кадра. Если у фрейма нет родителя, это значение действует как значение _self.
  • _search Отключено в Windows Internet Explorer 7, подробности см. В разделе Безопасность и совместимость в Internet Explorer 7. В противном случае sURL открывается в поисковой панели браузера в Internet Explorer 5 или более поздней версии.
  • _self Текущий документ заменен указанным sURL.
  • _top sURL заменяет любые наборы кадров, которые могут быть загружены. Если набор фреймов не определен, это значение действует как значение _self.

если используется другое имя wname, window.open не будет выполняться ...

5 голосов
/ 12 июня 2011

На самом деле имя может использоваться, но оно не может иметь пробелов, поэтому window.open("../myPage","MyWindows",...) должно работать без проблем ( window.open ).

4 голосов
/ 05 декабря 2012

Я также столкнулся с этой проблемой, когда использовал следующий код:

window.open('test.html','Window title','width=1200,height=800,scrollbars=yes');

но когда я удаляю пробел в "Заголовке окна" , работает следующий код:

window.open('test.html','Windowtitle','width=1200,height=800,scrollbars=yes');
2 голосов
/ 08 ноября 2011

Для меня проблема была с чертой "-" в поле имени окна. Я удалил тире, и IE не выдает ошибку и фактически открывает окно.

2 голосов
/ 20 июня 2011

Привет, используя следующий код, он работает ...

onclick="window.open('privacy_policy.php','','width=1200,height=800,scrollbars=yes');

Ранее я поступил как

onclick="window.open('privacy_policy.php','Window title','width=1200,height=800,scrollbars=yes');

Означает, что Microsoft не позволяет вам вводить имя окна, оно должно быть пустым в window.open функции ...

Спасибо, Нилеш Пангул

1 голос
/ 23 января 2013

Ответы здесь верны в том, что IE не поддерживает пробелы при установке заголовка в window.open (), ни один из них не предлагает обходного пути.

Я удалил заголовок из моего вызова window.open (вы можете использовать null или ''), и hten добавил следующее к открываемой странице:

<script>document.title = 'My new title';</script>

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

1 голос
/ 02 апреля 2009

Что представляет собой четвертая позиция, та, которая имеет «ложь» в качестве значения? Разве это не должно быть ложным (т.е. без кавычек?). Возможно, что более ранние версии IE приведут строку к логическому значению, но более новые - нет.

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