ie8 var w = window.open () - Сообщение: недопустимый аргумент.

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

Код такой:

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

Ошибка:

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

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

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

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

ОБНОВИТЬ:

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

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

По материалам:

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

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

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

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

person Community    schedule 02.04.2009    source источник
comment
У меня была такая же проблема, и пост Дэвида - лучший ответ. Спасибо за ваш пост и за помощь Дэвида.   -  person Ervin    schedule 23.09.2010


Ответы (14)


Это старый пост, но, возможно, он кому-то пригодится.

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

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

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

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

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

  • _пустой
  • _средства массовой информации
  • _parent
  • _поиск
  • _себя
  • _верхняя
person Community    schedule 22.09.2009
comment
Думаю, я не стал проверять объяснение этой функции в Mozilla, потому что я (спрашивающий) был сосредоточен на поломке, связанной только с IE8. - person benc; 23.09.2010
comment
проще говоря: developer.mozilla.org/en/DOM/window.open - ›strWindowName не указывает заголовок нового окна. - person benc; 23.09.2010
comment
Я также недавно обнаружил, что сообщение было вызвано недопустимыми символами / и +, переданными в wname. FF3 вроде не возражает. В этом смысле я думаю, что только IE8 является строгим, но, вероятно, это хорошо. - person benc; 27.09.2010
comment
У меня также была эта ошибка в IE, когда в моем имени окна было тире - в таком имени, как my-windowname, качество IE никогда не перестает меня удивлять. - person Matt Palmerlee; 27.07.2011
comment
Действительно полезная информация, спасибо, я думаю, что пробел не разрешен, подчеркивание работает нормально - person ppant; 08.09.2011
comment
На странице документации MSDN, на которую вы указали, указано «Необязательно». Строка, определяющая имя окна. , это звучит для меня так, как будто вы должны иметь возможность использовать любое ключевое слово, кроме аргументов, которые вы указали выше. - person James McMahon; 13.12.2011
comment
Спасибо за это! Я потратил всего 15 минут на эту ошибку, пока не нашел этот полезный пост только для записи. Я думаю, что раньше он работал в IE7 с произвольными именами, но в IE8 он был изменен на более строгую имплементацию. Это все еще происходит в IE9, поэтому вам лучше просто придерживаться предопределенных имен окон. - person Myke Black; 07.02.2012
comment
Он работает в IE8 с такими именами, как ImageDisplay1234, но не работает с Image-Display-1234. - person boatcoder; 25.02.2012
comment
@ Мэтт, на самом деле IE здесь лучше справляется с поиском тех, кто не читал документацию, тогда как большинство других браузеров просто пропускают это. Хотя я не являюсь поклонником IE, похоже, это в его пользу. - person Dmitry; 10.03.2012
comment
Второй параметр указывает атрибут TARGET, который также может быть произвольной строкой: msdn.microsoft.com/en-us/library/ms534659 (v = vs.85) .aspx. - person niaher; 22.08.2012
comment
Большое тебе спасибо! К сожалению, все еще актуально в 2014 году. - person wpp; 09.05.2014
comment
Этот ответ на самом деле неверен. Формат метода: window.open(url, [name], [features], [ieOnlyNonSpec_Replace]); Проблема связана с необязательным параметром name. В различных версиях IE есть ошибки, при которых пробелы или тире в имени приводят к тому, что окно не открывается. (К сожалению, я только что обнаружил проблему IE8 в некоторых настройках, где пустое имя (если указано) тоже вызывает проблемы (крайний случай с настройкой удаленного терминала)) - person scunliffe; 17.03.2015

IE придирчив к аргументу имени окна. Ему не нравятся пробелы, тире и другие знаки препинания.

person Community    schedule 12.01.2010
comment
или точки, тире или другие знаки препинания - person boatcoder; 25.02.2012
comment
Спасибо, это полезно .. действительно ненавижу IE 6-10 - person Dilip Godhani; 06.07.2015

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

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

person Community    schedule 13.01.2011
comment
Спасибо .. мне это помогло .. У меня в имени окна были тире (-) - person delux247; 28.06.2011

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

По желанию. Строка, определяющая имя окна. Это имя используется в качестве значения атрибута TARGET в форме или якорном элементе.

  • _blank URL-адрес загружается в новое безымянное окно.
  • _media URL-адрес загружается в панель мультимедиа в 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 не будет выполняться ...

person Community    schedule 29.05.2009
comment
Последнее утверждение неверно. Вы также можете (а) указать имя существующего фрейма для загрузки страницы в этот фрейм, (б) указать имя существующего именованного окна, чтобы загрузить туда страницу, или (в) указать имя, которое не существует для создания именованного окна. - person Ben Blank; 30.05.2009
comment
У меня была та же проблема, за исключением того, что я не устанавливал результат window.open для переменной. Имел заголовок страницы в переменной wname. Изменил его на _blank, и проблема устранилась. - person Derek White; 24.06.2009
comment
Я сузил его до не включать - или. Когда я избавился от знаков препинания Image-Display-1234 - ›ImageDisplay1234, все было хорошо. - person boatcoder; 25.02.2012
comment
Чтобы поддержать аргумент Бена, вот что MSDN говорит о втором параметре window.open: String, который указывает имя окна. Это имя используется в качестве значения атрибута TARGET в форме или якорном элементе. А вот документ атрибута TARGET: msdn.microsoft .com / en-us / library / ms534659 (v = vs.85) .aspx. В нем четко сказано, что целью может быть произвольная строка, а не только значения, перечисленные в этом ответе. - person niaher; 22.08.2012

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

person Community    schedule 11.06.2011

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

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

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

window.open('test.html','Windowtitle','width=1200,height=800,scrollbars=yes');
person Community    schedule 05.12.2012
comment
Это было очень полезно. Закончилось заменой моих пробелов на _. Глупый IE! - person MrGlass; 23.01.2013

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

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 функции ...

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

person Community    schedule 20.06.2011
comment
Это неверно, оно может быть пустым, но не обязательно. - person Jimmy Bosse; 18.07.2014

Для меня проблема заключалась в тире «-» в поле имени окна. Я удалил тире, и IE не выдает ошибок, а фактически открывает окно.

person Community    schedule 08.11.2011

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

person Community    schedule 02.04.2009
comment
Я удалил кавычки, но проблема не в этом для IE8. - person benc; 05.04.2009

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

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

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

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

person Community    schedule 23.01.2013

Попробуйте удалить последний аргумент. Кроме этого, убедитесь, что существуют urlstring, wname и wfeatures.

person Community    schedule 02.04.2009

Я обнаружил ту же проблему и после прочтения первого ответа, который предположил, что проблема вызвана именем окна, изменил его: сначала на _blank, который работал нормально (как совместимость, так и обычный вид), затем на предыдущее значение, только минус пробел в значении :) - тоже сработало. IMO, проблема (или ее часть) вызвана тем, что IE не может использовать обычное строковое значение в качестве wname. Надеюсь, это поможет, если кто-нибудь столкнется с той же проблемой.

person Community    schedule 05.08.2009

Если вы хотите использовать имя нового окна и т. Д., Разместив форму в этом окне, тогда решение, работающее в IE, FF, Chrome:

  var ret = window.open("", "_blank");
  ret.name = "NewFormName";

  var myForm = document.createElement("form");
  myForm.method="post";
  myForm.action = "xyz.php";
  myForm.target = "NewFormName";

      ...
person Community    schedule 24.03.2011

Кажется, что даже при использовании «действительного» имени настраиваемого окна (не _blank и т. Д.) С помощью window.open для запуска нового окна все еще возникают проблемы. Он отлично работает при первом нажатии на ссылку, но если вы щелкнете по ней еще раз (с открытым первым окном), вы получите сообщение об ошибке «Ошибка: такой интерфейс не поддерживается» отладкой сценария.

person Community    schedule 17.04.2014