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.

UPDATE2:

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

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

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

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

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

Ответ 1

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

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

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

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

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

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

  • _blank
  • _media
  • _parent
  • _search
  • _self
  • _top

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

  • _blank sURL загружается в новое, неназванное окно.
  • _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("../myPage","MyWindows",...) должен работать без проблем (window.open).

Ответ 6

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

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

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

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

Ответ 7

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

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...

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

Ответ 8

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

Ответ 9

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

Ответ 10

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

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

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

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

Ответ 11

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

Ответ 12

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

Ответ 13

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

      ...

Ответ 14

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

Ответ 15

Между тем, в 2019 году я получаю сообщение об ошибке в IE 11 с window.open, даже если в параметре name нет пробелов или дефисов. На самом деле это не разрешается для window.close().

Ниже, при выходе из Главного окна, дочернее окно, открытое в OpenWindowWithGet(), не закрывается в IE11. Прекрасно работает с Google Chrome.

<html>
<script type="text/javascript">

function OpenWindowWithGet(urllink, windowoption, name){
form.method = "GET";
form.action = urllink;
form.target = name;

var input = document.createElement("input");
input.type = "hidden";
input.name = "OAP_Id";
input.value = OAP_Id;
form.appendChild(input);

document.body.appendChild(form);
win1 = window.open(urllink, "Manual", windowoption);
form.submit();}

function OAPLogoutClick(){ 
     disconnectFromNodeServer();
     win1.close();

}


Какие-либо предложения?

Спасибо.