ie8 var w = window.open () - "Повідомлення: недійсний аргумент."


113

У мене є сайт, у якого є лише проблема IE8:

Код:

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

Помилка:

Повідомлення: Недійсний аргумент.
Рядок: 419 Char: 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 допускає лише такі аргументи, якщо цей аргумент взагалі використовується:

  • _порожня
  • _media
  • _поглядний
  • _пошук
  • _ себе
  • _top

1
Я думаю, що я знехтував перевірити пояснення Mozilla цієї функції, тому що я (запитувач) був зосереджений на поломці лише IE8.
benc

2
просто кажучи: developer.mozilla.org/uk/DOM/window.open -> "strWindowName не вказує заголовок нового вікна."
benc

33
У мене також була помилка в IE, коли в моєму імені Windows було тире "-" у назві типу "my-windowname", якість IE ніколи не перестає мене дивувати.
Метт Палмерлі

1
Сторінка документації MSDN, до якої ви посилаєтесь, повідомляє "Необов’язково. Рядок, що вказує ім'я вікна", мені здається, що ви повинні мати можливість будь-якого ключового слова, крім аргументів, які ви перераховували вище.
Джеймс Макмахон

3
Він працює в IE8 з такими іменами, як ImageDisplay1234, але не працює з Image-Display-1234
boatcoder


16

Під час виклику window.openв IE, другий аргумент (назва вікна) повинен бути або одним із заздалегідь визначених цільових рядків, або рядком, який має форму дійсного ідентифікатора в JavaScript.

Отже, що працює в Firefox: "Job Directory 9463460", не працює в Internet Explorer, і його потрібно замінити на "Job_Directory_9463460", наприклад (немає пробілів, мінусів, жодних крапок, він повинен бути дійсним ідентифікатором) .


Дякую .. це мені допомогло .. У моєму імені вікна були тире (-)
delux247

8

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

За бажанням. Рядок, що вказує назву вікна. Ця назва використовується як значення для атрибута TARGET у формі або елементі якоря.

  • _blank SURL завантажується у нове, неназване вікно.
  • _media URL завантажується в панель медіа-файлів у Microsoft Internet Explorer 6. Пакет оновлень 2 для Microsoft Windows XP (SP2) та новіших версій. Ця функція більше не підтримується. За замовчуванням URL завантажується у нове вікно або вкладку браузера.
  • _parent SURL завантажується в батьківський поточний кадр. Якщо в кадрі немає батьківського значення, це значення виступає як значення _self.
  • _search Вимкнено в Windows Internet Explorer 7, докладні відомості див. у розділі Безпека та сумісність у Internet Explorer 7. В іншому випадку sURL відкривається на панелі пошуку браузера в Internet Explorer 5 або пізнішої версії.
  • _self Поточний документ замінено на вказаний sURL.
  • _top sURL замінює будь-які набори кадрів, які можуть бути завантажені. Якщо не визначені набори фреймів, це значення діє як значення _self.

якщо використовується інше ім'я, window.open не виконається ...


5
Останнє твердження невірне. Ви також можете (a) вказати ім'я існуючого кадру для завантаження сторінки в цей кадр, (b) вказати ім'я існуючого "іменованого вікна", щоб завантажити туди сторінку, або (c) вказати ім'я, яке не ' t існують для створення "названого вікна".
Бен Бланк

У мене була така ж проблема, за винятком того, що я не встановив результат window.open на змінну. Мав назву сторінки у змінній wname. Змінив його на '_blank', і він усунув проблему.
Дерек Уайт

Те, що я звужував, не включало - або. Коли я позбувся пунктуації Image-Display-1234 -> ImageDisplay1234, тоді все було добре.
boatcoder

1
Щоб підтримати аргумент Бена, це те, що MSDN говорить про другий параметр window.open: "Рядок, що визначає ім'я вікна. Це ім'я використовується як значення для атрибута TARGET у формі або елементі якоря." А ось атрибут TARGET doc: 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 (), схоже, жоден варіант не пропонує.

Я видалив заголовок зі свого вікна. Відкрийте дзвінок (ви можете використовувати null або ''), а hten додав на сторінку, що відкривається:

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

Не ідеально будь-яким способом, але це дозволить вам встановити заголовок на все, що ви хочете, у всіх браузерах.


0

Спробуйте видалити останній аргумент. Крім цього, переконайтеся, що існують URL-адреса, ім’я та wfeatures.


0

Я виявив ту саму проблему, і прочитавши першу відповідь, яка передбачає, що проблема викликана назвою вікна, змінила її: спочатку на '_blank', яка спрацювала нормально (як сумісність, так і звичайний перегляд), потім до попереднього значення, лише мінус простір у значенні :) - теж працював. IMO, проблема (або її частина) викликана тим, що IE не може використовувати нормальне значення рядка як ім'я. Сподіваюся, це допоможе, якщо хтось зіткнеться з тією ж проблемою.


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.