ie8 var w = window.open () - “Thông báo: Đối số không hợp lệ.”


113

Tôi có một trang web gặp sự cố chỉ IE8:

Mã là:

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

Lỗi là:

Thông báo: Đối số không hợp lệ.
Dòng: 419 Char: 5
Mã: 0
URI: http: //HOSTNAME/js_context.js

Tôi đã xác nhận số dòng của mã ("Dòng" và "URI" là chính xác) và tôi hiểu trong các phiên bản IE8 sau này, điều này được coi là chính xác.

Tôi đã kiểm tra tất cả các thông số đến trong cuộc gọi bằng cách kết xuất cảnh báo và tất cả chúng đều hợp lệ.

Vấn đề này không xảy ra trên FF (có thể là 3).

CẬP NHẬT:

Vấn đề dường như là trong việc sử dụng gán kết quả của window.open () khi thực hiện "var w". Khi tôi chia dòng thành hai câu lệnh, nó hoạt động trong IE8.

CẬP NHẬT2:

Dựa trên:

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

Khi một hàm được gọi ngay lập tức, toàn bộ biểu thức gọi phải được bao bọc trong các parens để rõ ràng rằng giá trị được tạo ra là kết quả của hàm chứ không phải chính hàm.

Đây không phải là chính xác những gì đang diễn ra ở đây, nhưng tôi thấy rằng việc áp dụng nguyên tắc đã giải quyết được vấn đề, trong chế độ tương thích của IE8.

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

Tôi đã gặp vấn đề tương tự, và bài đăng của David là câu trả lời tốt nhất. Cảm ơn bạn đã đăng bài và sự giúp đỡ của David.
Ervin

Câu trả lời:


251

Đây là một bài viết cũ nhưng có thể vẫn hữu ích cho ai đó.

Tôi đã có cùng một thông báo lỗi. Cuối cùng, vấn đề là tên không hợp lệ cho đối số thứ hai, tức là, tôi có một dòng như:

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

Vấn đề là 'tiêu đề cửa sổ' vì nó không hợp lệ. Nó hoạt động tốt với dòng sau:

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

Trên thực tế, đọc kỹ, tôi nhận ra rằng Microsoft không hỗ trợ nameđối số thứ hai. Khi bạn xem trang tài liệu chính thức , bạn thấy rằng Microsoft chỉ cho phép các đối số sau, Nếu sử dụng đối số đó:

  • _chỗ trống
  • _phương tiện truyền thông
  • _cha mẹ
  • _Tìm kiếm
  • _chính mình
  • _hàng đầu

1
Tôi nghĩ rằng tôi đã sơ ý kiểm tra phần giải thích của Mozilla về chức năng này, bởi vì tôi (người hỏi) chỉ tập trung vào sự cố chỉ dành cho IE8.
benc 23/09/10

2
chỉ cần đặt: developer.mozilla.org/en/DOM/window.open -> "strWindowName không chỉ định tiêu đề của cửa sổ mới."
benc

33
Tôi cũng gặp lỗi này trong IE khi tên cửa sổ của tôi có dấu gạch ngang "-" trong tên chẳng hạn như "my-windowname", chất lượng IE không bao giờ làm tôi ngạc nhiên.
Matt Palmerlee

1
Trang tài liệu MSDN mà bạn đã liên kết đến cho biết "Tùy chọn. Chuỗi chỉ định tên của cửa sổ.", Tôi nghe có vẻ như bạn có thể có bất kỳ từ khóa nào ngoài các đối số bạn đã liệt kê ở trên.
James McMahon

3
Nó hoạt động trong IE8 với các tên như ImageDisplay1234 nhưng không hoạt động với Image-Display-1234
boatcoder

78

IE kén chọn đối số tên cửa sổ. Nó không thích dấu cách, dấu gạch ngang hoặc các dấu câu khác.


3
hoặc dấu chấm hoặc dấu gạch ngang hoặc có thể là dấu câu khác
boatcoder

Nhờ đây là helpful..really ghét IE 6-10
Dilip Godhani

16

Khi bạn gọi window.opentrong IE, đối số thứ hai (tên cửa sổ) phải là một trong các chuỗi mục tiêu được xác định trước hoặc một chuỗi, có dạng mã định danh hợp lệ trong JavaScript.

Vì vậy, những gì hoạt động trong Firefox: "Job Directory 9463460", không hoạt động trong Internet Exploder và phải được thay thế bằng: "Job_Directory_9463460" chẳng hạn (không có dấu cách, không có dấu trừ, không có dấu chấm, nó phải là số nhận dạng hợp lệ) .


Cảm ơn .. này đã giúp tôi .. Tôi đã có dấu gạch ngang (-) trong cửa sổ của tôi tên
delux247

8

vấn đề có thể là tên wname, hãy thử sử dụng một trong những tên được hiển thị trong liên kết ở trên, tôi trích dẫn:

Không bắt buộc. Chuỗi chỉ định tên của cửa sổ. Tên này được sử dụng làm giá trị cho thuộc tính TARGET trên một biểu mẫu hoặc một phần tử neo.

  • _blank SURL được tải vào một cửa sổ mới, không có tên.
  • _media Url được tải trong Media Bar trong Microsoft Internet Explorer 6. Microsoft Windows XP Gói Dịch vụ 2 (SP2) trở lên. Tính năng này không còn được hỗ trợ. Theo mặc định, url được tải vào một cửa sổ hoặc tab trình duyệt mới.
  • _parent SURL được tải vào cha của khung hiện tại. Nếu khung không có cha, giá trị này đóng vai trò là giá trị _self.
  • _tìm kiếm bị Tắt trong Windows Internet Explorer 7, xem Bảo mật và Tương thích trong Internet Explorer 7 để biết chi tiết. Nếu không, sURL sẽ được mở trong ngăn tìm kiếm của trình duyệt trong Internet Explorer 5 trở lên.
  • _self Tài liệu hiện tại được thay thế bằng sURL được chỉ định.
  • _top sURL thay thế bất kỳ bộ khung nào có thể được tải. Nếu không có bộ khung nào được xác định, giá trị này đóng vai trò là giá trị _self.

nếu sử dụng wname khác, window.open sẽ không thực thi ...


5
Tuyên bố cuối cùng đó không chính xác. Bạn cũng có thể (a) chỉ định tên của khung hiện có để tải trang trong khung đó, (b) chỉ định tên của "cửa sổ được đặt tên" hiện có để tải trang ở đó hoặc (c) chỉ định tên không ' t tồn tại để tạo một "cửa sổ được đặt tên".
Ben Blank

Tôi đã gặp vấn đề tương tự ngoại trừ việc tôi không đặt kết quả của window.open thành một biến. Có tiêu đề trang trong biến wname. Đã thay đổi nó thành '_blank' và nó đã khắc phục được sự cố.
Derek White

Những gì tôi thu hẹp nó lại là không bao gồm - hoặc. Khi tôi loại bỏ dấu chấm câu Image-Display-1234 -> ImageDisplay1234 thì tất cả đều ổn.
boatcoder

1
Để hỗ trợ đối số của Ben, đây là những gì MSDN nói về tham số thứ 2 của window.open: "Chuỗi chỉ định tên của cửa sổ. Tên này được sử dụng làm giá trị cho thuộc tính TARGET trên một biểu mẫu hoặc một phần tử neo." Và đây là tài liệu thuộc tính TARGET: msdn.microsoft.com/en-us/library/ms534659(v=vs.85).aspx . Nó nói rõ rằng đích có thể là một chuỗi tùy ý và không chỉ các giá trị được liệt kê trong câu trả lời này.
niaher

5

Trên thực tế, một cái tên có thể được sử dụng tuy nhiên nó không thể có khoảng trắng vì vậy window.open("../myPage","MyWindows",...)sẽ hoạt động không có vấn đề gì ( window.open ).


4

Tôi cũng gặp sự cố này khi tôi sử dụng mã sau:

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

nhưng khi tôi xóa không gian trống của "Tiêu đề cửa sổ" , mã dưới đây đang hoạt động:

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

Điều này rất hữu ích. Đã kết thúc việc thay thế khoảng trắng của tôi bằng _. IE ngu ngốc!
MrGlass

2

Xin chào bằng cách sử dụng mã sau, nó đang hoạt động ...

onclick="window.open('privacy_policy.php','','width=1200,height=800,scrollbars=yes');

Trước đây tôi đã nhập thích

onclick="window.open('privacy_policy.php','Window title','width=1200,height=800,scrollbars=yes');

Có nghĩa là Microsoft không cho phép bạn nhập tên cửa sổ nên để trống trong window.openhàm ...

Cảm ơn, Nilesh Pangul


Điều này không chính xác, nó có thể để trống nhưng không nhất thiết phải để trống.
Jimmy Bosse,

2

Đối với tôi, vấn đề là với dấu gạch ngang "-" trong trường tên cửa sổ. Tôi đã loại bỏ các dấu gạch ngang và IE không bị lỗi và thực tế là mở cửa sổ.


1

Vị trí số 4 đại diện cho điều gì, vị trí có giá trị 'false'? Điều đó không nên sai, (tức là không có dấu ngoặc kép?). Có thể các phiên bản IE trước sẽ buộc chuỗi thành boolean, nhưng những phiên bản mới hơn thì không.


Tôi đã xóa các dấu ngoặc kép, nhưng nó không phải là nguồn gốc của sự cố đối với IE8.
benc

1

Các câu trả lời ở đây là chính xác vì IE không hỗ trợ dấu cách khi đặt tiêu đề trong window.open (), dường như không có giải pháp nào đưa ra giải pháp thay thế.

Tôi đã xóa tiêu đề khỏi lệnh gọi window.open của mình (bạn có thể sử dụng null hoặc '') và hten đã thêm phần sau vào trang đang được mở:

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

Không lý tưởng bằng bất kỳ phương tiện nào, nhưng điều này sẽ cho phép bạn đặt tiêu đề thành bất kỳ thứ gì bạn muốn trong tất cả các trình duyệt.


0

Thử xóa đối số cuối cùng. Ngoài ra, hãy đảm bảo rằng urlstring, wname và wfeatures tồn tại.


0

Tôi đã phát hiện ra vấn đề tương tự và sau khi đọc câu trả lời đầu tiên cho rằng vấn đề là do tên cửa sổ, đã thay đổi nó: đầu tiên thành '_blank', hoạt động tốt (cả khả năng tương thích và chế độ xem thông thường), sau đó đến giá trị trước đó, chỉ trừ không gian trong giá trị :) - cũng hoạt động. IMO, vấn đề (hoặc một phần của nó) là do IE không thể sử dụng giá trị chuỗi bình thường làm tên wname. Hy vọng điều này sẽ giúp nếu ai đó gặp phải vấn đề tương tự.


0

Nếu bạn muốn sử dụng tên của cửa sổ mới, v.v. đăng một biểu mẫu lên cửa sổ này, thì giải pháp, hoạt động trong 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

Có vẻ như ngay cả khi sử dụng tên cửa sổ tùy chỉnh "hợp lệ" (không phải _blank, v.v.) bằng window.open để khởi chạy cửa sổ mới, vẫn có vấn đề. Nó hoạt động tốt trong lần đầu tiên bạn nhấp vào liên kết, nhưng nếu bạn nhấp lại vào nó (với cửa sổ khởi chạy đầu tiên vẫn mở), bạn sẽ nhận được lỗi tập lệnh "Lỗi: Không hỗ trợ giao diện như vậy".

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.