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


113

У меня есть сайт, на котором проблема только с 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));

У меня была такая же проблема, и пост Дэвида - лучший ответ. Спасибо за ваш пост и за помощь Дэвида.
Эрвин,

Ответы:


251

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

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

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

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

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

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

  • _blank
  • _СМИ
  • _parent
  • _поиск
  • _self
  • _верхняя

1
Думаю, я не стал проверять объяснение этой функции в Mozilla, потому что я (спрашивающий) был сосредоточен на поломке только IE8.
Benc

2
Проще говоря: developer.mozilla.org/en/DOM/window.open -> «strWindowName не указывает заголовок нового окна».
Benc

33
У меня также была эта ошибка в IE, когда в моем имени окна было тире "-" в имени, таком как "my-windowname", качество IE не перестает меня удивлять.
Мэтт Палмерли

1
На странице документации MSDN, на которую вы ссылались, указано «Необязательно. Строка, определяющая имя окна.», Что для меня звучит так, как будто вы должны иметь возможность использовать любое ключевое слово, кроме аргументов, которые вы указали выше.
Джеймс МакМахон,

3
Он работает в IE8 с такими именами, как ImageDisplay1234, но не работает с Image-Display-1234
boatcoder


16

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

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


Спасибо .. это мне помогло .. У меня в имени окна были тире (-)
delux247

8

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


5
Последнее утверждение неверно. Вы также можете (а) указать имя существующего фрейма для загрузки страницы в этот фрейм, (б) указать имя существующего «именованного окна», чтобы загрузить туда страницу, или (в) указать имя, которое не соответствует ' не существует для создания «именованного окна».
Бен Бланк,

У меня была та же проблема, за исключением того, что я не устанавливал результат window.open для переменной. Имел заголовок страницы в переменной wname. Изменил его на _blank, и проблема устранилась.
Дерек Уайт,

Я сузил его до не включать - или. Когда я избавился от знаков препинания Image-Display-1234 -> ImageDisplay1234, все было хорошо.
boatcoder

1
Чтобы поддержать аргумент Бена, вот что MSDN говорит о втором параметре window.open: «Строка, которая определяет имя окна. Это имя используется как значение для атрибута TARGET в форме или якорном элементе». А вот документ атрибута TARGET: msdn.microsoft.com/en-us/library/ms534659(v=vs.85).aspx . В нем ясно сказано, что цель может быть произвольной строкой, а не только значениями, перечисленными в этом ответе.
niaher

5

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


4

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

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

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

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

Это было очень полезно. Закончилось заменой моих пробелов на _. Глупый IE!
MrGlass

2

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

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

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


Это неверно, оно может быть пустым, но не обязательно.
Джимми Боссе

2

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


1

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


Я удалил кавычки, но это не было источником проблемы для IE8.
benc

1

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

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

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

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


0

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


0

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


0

Если вы хотите использовать имя нового окна и т. Д., Разместив форму в этом окне, тогда решение, работающее в 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";

      ...

0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.