113

Tôi có một trang web có vấn đề chỉ với IE8:

Mã này là:

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

Lỗi là:

Tin nhắn: Đố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 sau của IE8, điều này được coi là chính xác.

Tôi đã kiểm tra tất cả các tham số đến trong cuộc gọi bằng cách hủy thông 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 sẽ được gói trong 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 vấn đề, trong chế độ tương thích của IE8.

var w = (window.open(urlstring, wname, wfeatures, false));
|
  • Tôi đã có cùng một vấn đề, và bài viết của David là câu trả lời tốt nhất. Cảm ơn bạn cho bài viết của bạn và giúp đỡ của David.

    – Bùi Hải Anh 09:29:00 23/09/2010
251

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

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

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

Vấn đề là "một 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');

Trong 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 nhìn vào trang tài liệu chính thức , bạn sẽ 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 đã bỏ qua việc kiểm tra giải thích của Mozilla về chức năng này, bởi vì tôi (người hỏi) đã tập trung vào sự cố chỉ dành cho IE8.

    – Tạ Mộng Giác 16:27:11 23/09/2010
  • 1

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

    – Hồ Huy Tuấn 16:28:08 23/09/2010
  • 1

    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 như "my-Windowname", chất lượng IE không bao giờ hết làm tôi ngạc nhiên.

    – Đỗ Thanh Yến 06:09:06 27/07/2011
  • 1

    Trang tài liệu MSDN mà bạn đã liên kết với các trạng thái "Tùy chọn. Chuỗi xác định tên của cửa sổ.", Âm thanh đó đối với tôi giống 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.

    – Dương Yên Khuê 19:36:13 13/12/2011
  • 1

    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

    – Trịnh Thái Tâm 19:58:31 25/02/2012
78

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

|
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 định danh hợp lệ trong JavaScript.

Vì vậy, những gì hoạt động trong Firefox: "Danh mục công việc 9463460", không hoạt động trong Internet Exploder và phải được thay thế bằng: "Job_Directory_9463460" chẳng hạn .

|
8

vấn đề có thể là tên, 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 biểu mẫu hoặc thành phần neo.

  • _blank SURL được tải vào một cửa sổ mới, chưa được đặt 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ổ trình duyệt hoặc tab mới.
  • _parent SURL được tải vào cha mẹ của khung hiện tại. Nếu khung không có cha, giá trị này đóng vai trò là chính giá trị.
  • _search bị vô hiệu hóa trong Windows Internet Explorer 7, xem Bảo mật và tương thích trong Internet Explorer 7 để biết chi tiết. Mặt khác, sURL được mở trong ngăn tìm kiếm của trình duyệt trong Internet Explorer 5 trở lên.
  • _elf 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à chính giá trị.

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

|
  • 1

    Câu nói cuối cùng không đúng. 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ên" hiện có để tải trang ở đó hoặc (c) chỉ định tên không ' t tồn tại để tạo ra một "cửa sổ được đặt tên".

    – Trịnh Tường Ngân 21:59:53 29/05/2009
  • 1

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

    – Tạ Huyền Trân 18:48:14 24/06/2009
  • 1

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

    – Lý Phương Anh 19:56:53 25/02/2012
  • 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 xác đị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 biểu mẫu hoặc phần tử neo." Và đây là tài liệu thuộc tính TARGET: msdn.microsoft.com/en-us/l Library / ms534659 (v = vs85) .aspx . Nó nói rõ rằng mục tiêu 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.

    – Dương Ðức Khang 03:30:55 22/08/2012
5

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

|
4

Tôi cũng gặp vấn đề này trong khi tôi sử dụng đoạn mã sau:

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

nhưng khi tôi xóa khoảng trống của "Tiêu đề cửa sổ" thì đoạn mã dưới đây đang hoạt động:

window.open('test.html','Windowtitle','width=1200,height=800,scrollbars=yes');
|
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 đã xóa dấu gạch ngang và IE không lỗi và thực tế là mở cửa sổ.

|
2

Xin chào bằng cách sử dụng đoạn mã sau đây ...

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

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

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ó sẽ trống trong window.openchức năng ...

Cảm ơn, Nilesh Pangul

|
1

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

Tôi đã xóa tiêu đề khỏi cuộc 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 cứ điều gì bạn muốn trong tất cả các trình duyệt.

|
1

Vị trí bốn đại diện cho cái gì, cái có 'sai' là một giá trị? Không nên là 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ẽ ép buộc chuỗi thành boolean, nhưng các phiên bản mới hơn thì không.

|
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 một cửa sổ mới, vẫn còn có vấn đề. Nó hoạt động tốt khi bạn nhấp vào liên kết lần đầu tiên, 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 còn), bạn sẽ nhận được một lỗi "Lỗi: Không hỗ trợ giao diện như vậy".

|
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

Tôi đã phát hiện ra cùng một vấn đề và sau khi đọc câu trả lời đầu tiên cho rằng vấn đề là do tên cửa sổ gây ra, đã thay đổi: đầ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, sự cố (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. Hy vọng điều này sẽ giúp nếu bất cứ ai gặp phải vấn đề tương tự.

|
0

Hãy thử loại bỏ đối số cuối cùng. Ngoài ra, hãy đảm bảo tồn tại url chuỗi, tên và wfeatures.

|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.