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));
benc
источник
У меня была такая же проблема, и пост Дэвида - лучший ответ. Спасибо за ваш пост и за помощь Дэвида.
Эрвин,

Ответы:

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
78

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

prlafferty
источник
3
или точки, тире или, может быть, другая пунктуация
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функции ...

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

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

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

iohans
источник
1

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

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

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

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

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

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

MrGlass
источник
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 для запуска нового окна все еще возникают проблемы. Он отлично работает при первом нажатии на ссылку, но если вы щелкнете по ней еще раз (с открытым первым окном), вы получите сообщение об ошибке «Ошибка: такой интерфейс не поддерживается».

Винс
источник