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

ฉันได้ยืนยันหมายเลขบรรทัดของรหัสแล้ว ("Line" และ "URI" ถูกต้อง) และฉันเข้าใจใน IE8 รุ่นที่ใหม่กว่าซึ่งถือว่าถูกต้อง

ฉันได้ตรวจสอบพารามิเตอร์ขาเข้าทั้งหมดในการโทรโดยการทิ้งการแจ้งเตือนและทั้งหมดดูถูกต้อง

ปัญหานี้ไม่เกิดขึ้นกับ FF (อาจเป็น 3)

UPDATE:

ปัญหาดูเหมือนจะอยู่ในการใช้การกำหนดผลลัพธ์ของ window.open () เมื่อทำ "var w" เมื่อฉันแบ่งบรรทัดออกเป็นสองคำสั่งมันทำงานใน IE8

UPDATE2:

ขึ้นอยู่กับ:

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

เมื่อต้องการเรียกใช้ฟังก์ชันทันทีนิพจน์การเรียกใช้ทั้งหมดควรถูกรวมไว้ใน parens เพื่อให้ชัดเจนว่าค่าที่สร้างขึ้นนั้นเป็นผลมาจากฟังก์ชันไม่ใช่ฟังก์ชันเอง

นี่ไม่ใช่สิ่งที่เกิดขึ้นที่นี่ แต่ฉันพบว่าการใช้หลักการนี้ช่วยแก้ปัญหาได้ในโหมดความเข้ากันได้ของ IE8

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

ฉันมีปัญหาเดียวกันและโพสต์ของ David คือคำตอบที่ดีที่สุด ขอบคุณสำหรับโพสต์ของคุณและสำหรับความช่วยเหลือของ David
Ervin

คำตอบ:


251

นี่เป็นโพสต์เก่า แต่อาจยังมีประโยชน์สำหรับใครบางคน

ฉันมีข้อความแสดงข้อผิดพลาดเดียวกัน ในที่สุดปัญหาคือชื่อที่ไม่ถูกต้องสำหรับอาร์กิวเมนต์ที่สองกล่าวคือฉันมีบรรทัดดังนี้:

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

ปัญหาคือ "ชื่อหน้าต่าง" เนื่องจากไม่ถูกต้อง ทำงานได้ดีกับบรรทัดต่อไปนี้:

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

ในความเป็นจริงการอ่านอย่างละเอียดฉันตระหนักว่า Microsoft ไม่สนับสนุนnameอาร์กิวเมนต์ที่สอง เมื่อคุณดูหน้าเอกสารอย่างเป็นทางการคุณจะเห็นว่า Microsoft อนุญาตเฉพาะอาร์กิวเมนต์ต่อไปนี้หากใช้อาร์กิวเมนต์นั้นทั้งหมด:

  • _ blank
  • _media
  • _parent
  • _ค้นหา
  • _self
  • _top

1
ฉันคิดว่าฉันละเลยที่จะตรวจสอบคำอธิบาย Mozilla ของฟังก์ชันนี้เนื่องจากฉัน (ผู้ถาม) มุ่งเน้นไปที่การแตกของ IE8 เท่านั้น
benc

2
เพียงแค่ใส่: developer.mozilla.org/en/DOM/window.open -> "strWindowName ไม่ได้ระบุชื่อของหน้าต่างใหม่"
benc

33
ฉันยังมีข้อผิดพลาดนี้ใน IE เมื่อชื่อ windows ของฉันมีเครื่องหมายขีด "-" ในชื่อเช่น "my-windowname" คุณภาพของ IE ไม่เคยทำให้ฉันประหลาดใจ
Matt Palmerlee

1
หน้าเอกสาร MSDN ที่คุณเชื่อมโยงกับสถานะ "ไม่บังคับสตริงที่ระบุชื่อของหน้าต่าง" ซึ่งดูเหมือนว่าคุณควรจะสามารถใช้คีย์เวิร์ดใดก็ได้นอกเหนือจากอาร์กิวเมนต์ที่คุณระบุไว้ด้านบน
James McMahon

3
ทำงานใน IE8 ที่มีชื่อเช่น ImageDisplay1234 แต่ไม่ทำงานกับ Image-Display-1234
boatcoder

78

IE จู้จี้จุกจิกเกี่ยวกับอาร์กิวเมนต์ชื่อหน้าต่าง ไม่ชอบเว้นวรรคขีดกลางหรือเครื่องหมายวรรคตอนอื่น ๆ


3
หรือจุดหรือขีดกลางหรือเครื่องหมายวรรคตอนอื่น ๆ
boatcoder

ขอบคุณสิ่งนี้มีประโยชน์.. เกลียด IE 6-10
จริงๆ

16

เมื่อคุณเรียกใช้window.openใน IE อาร์กิวเมนต์ที่สอง (ชื่อหน้าต่าง) จะต้องเป็นหนึ่งในสตริงเป้าหมายที่กำหนดไว้ล่วงหน้าหรือสตริงซึ่งมีรูปแบบของตัวระบุที่ถูกต้องใน JavaScript

สิ่งที่ใช้ได้ใน Firefox: "Job Directory 9463460" ไม่ทำงานใน Internet Exploder และต้องถูกแทนที่ด้วย: "Job_Directory_9463460" เช่น (ไม่มีช่องว่างไม่มีเครื่องหมายลบไม่มีจุดต้องเป็นตัวระบุที่ถูกต้อง) .


ขอบคุณ .. สิ่งนี้ช่วยฉันได้ .. ฉันมีขีดกลาง (-) ในชื่อหน้าต่าง
delux247

8

ปัญหาอาจเป็น wname ลองใช้หนึ่งในสิ่งที่แสดงในลิงค์ด้านบนฉันอ้างถึง:

ไม่จำเป็น. สตริงที่ระบุชื่อของหน้าต่าง ชื่อนี้ใช้เป็นค่าสำหรับแอตทริบิวต์ TARGET บนฟอร์มหรือองค์ประกอบจุดยึด

  • _blank sURL ถูกโหลดลงในหน้าต่างใหม่ที่ไม่มีชื่อ
  • _media url ถูกโหลดใน Media Bar ใน Microsoft Internet Explorer 6 Microsoft Windows XP Service Pack 2 (SP2) และใหม่กว่า ไม่รองรับฟีเจอร์นี้อีกต่อไป โดยค่าเริ่มต้น url จะโหลดลงในหน้าต่างหรือแท็บเบราว์เซอร์ใหม่
  • _parent sURL ถูกโหลดลงในพาเรนต์ของเฟรมปัจจุบัน หากเฟรมไม่มีพาเรนต์ค่านี้จะทำหน้าที่เป็นค่า _self
  • _search Disabled ใน Windows Internet Explorer 7 โปรดดูความปลอดภัยและความเข้ากันได้ใน Internet Explorer 7 สำหรับรายละเอียด มิฉะนั้น sURL จะเปิดขึ้นในบานหน้าต่างค้นหาของเบราว์เซอร์ใน Internet Explorer 5 หรือใหม่กว่า
  • _self เอกสารปัจจุบันถูกแทนที่ด้วย sURL ที่ระบุ
  • _top sURL แทนที่เฟรมเซ็ตใด ๆ ที่อาจโหลดได้ หากไม่ได้กำหนดเฟรมเซตไว้ค่านี้จะทำหน้าที่เป็นค่า _self

ถ้าใช้ wname อื่น window.open จะไม่ทำงาน ...


5
คำพูดสุดท้ายนั้นไม่ถูกต้อง คุณยังสามารถ (a) ระบุชื่อของเฟรมที่มีอยู่เพื่อโหลดเพจในเฟรมนั้น (b) ระบุชื่อของ "หน้าต่างที่มีชื่อ" ที่มีอยู่เพื่อโหลดเพจที่นั่นหรือ (c) ระบุชื่อที่ไม่ ' ไม่มีอยู่เพื่อสร้าง "หน้าต่างที่มีชื่อ"
Ben Blank

ฉันมีปัญหาเดียวกันยกเว้นฉันไม่ได้ตั้งค่าผลลัพธ์ของ window.open เป็นตัวแปร มีชื่อหน้าในตัวแปร wname เปลี่ยนเป็น "_blank" และแก้ไขปัญหาได้
Derek White

สิ่งที่ฉัน จำกัด ให้แคบลงคือไม่รวม - หรือ. เมื่อฉันกำจัดเครื่องหมายวรรคตอน Image-Display-1234 -> ImageDisplay1234 แล้วทุกอย่างก็เรียบร้อยดี
boatcoder

1
เพื่อสนับสนุนอาร์กิวเมนต์ของ Ben นี่คือสิ่งที่ MSDN กล่าวเกี่ยวกับพารามิเตอร์ที่ 2 ของ window.open: "สตริงที่ระบุชื่อของหน้าต่างชื่อนี้ใช้เป็นค่าสำหรับแอตทริบิวต์ 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 title"โค้ดด้านล่างจะใช้งานได้:

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


สิ่งนี้ไม่ถูกต้องสามารถเว้นว่างได้ แต่ไม่จำเป็นต้องเว้นว่าง
Jimmy Bosse

2

สำหรับฉันปัญหาคือมีเครื่องหมายขีด "-" ในช่องชื่อหน้าต่าง ฉันลบขีดกลางและ IE ไม่ผิดพลาดและในความเป็นจริงจะเปิดหน้าต่าง


1

ตำแหน่งที่สี่แสดงถึงอะไรตำแหน่งที่มี 'เท็จ' เป็นค่า? สิ่งนั้นไม่ควรเป็นเท็จ (เช่นไม่มีเครื่องหมายอัญประกาศ) เป็นไปได้ว่า IE เวอร์ชันก่อนหน้าจะบังคับสตริงให้เป็นบูลีน แต่เวอร์ชันที่ใหม่กว่าไม่ทำ


ฉันลบเครื่องหมายคำพูดออก แต่มันไม่ใช่สาเหตุของปัญหาสำหรับ IE8
benc

1

คำตอบที่นี่ถูกต้องเนื่องจาก IE ไม่รองรับการเว้นวรรคเมื่อตั้งชื่อเรื่องใน window.open () ดูเหมือนจะไม่มีวิธีแก้ปัญหา

ฉันลบชื่อออกจากการเรียก window.open ของฉัน (คุณสามารถใช้ null หรือ '') และ hten ได้เพิ่มสิ่งต่อไปนี้ในหน้าที่กำลังเปิด:

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

ไม่เหมาะไม่ว่าจะด้วยวิธีใด ๆ แต่จะช่วยให้คุณสามารถตั้งชื่อเป็นสิ่งที่คุณต้องการในเบราว์เซอร์ทั้งหมด


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 เพื่อเปิดหน้าต่างใหม่ แต่ก็ยังมีปัญหา ใช้งานได้ดีในครั้งแรกที่คุณคลิกลิงก์ แต่ถ้าคุณคลิกอีกครั้ง (โดยที่หน้าต่างที่เปิดขึ้นมาครั้งแรกยังคงเปิดอยู่) คุณจะได้รับข้อผิดพลาดสคริปต์ "ข้อผิดพลาด: ไม่รองรับอินเทอร์เฟซดังกล่าว"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.