จะปิดแท็บปัจจุบันในหน้าต่างเบราว์เซอร์ได้อย่างไร?


435

ฉันต้องการสร้างลิงค์บนหน้าเว็บที่จะปิดแท็บที่ใช้งานอยู่ในปัจจุบันในเบราว์เซอร์โดยไม่ต้องปิดแท็บอื่น ๆ ในเบราว์เซอร์
เมื่อผู้ใช้คลิกที่ลิงค์ปิดข้อความเตือนจะปรากฏขึ้นเพื่อขอให้ผู้ใช้ยืนยันด้วยปุ่มสองปุ่มคือ "ใช่" และ "ไม่" หากผู้ใช้คลิกที่ "ใช่" ให้ปิดหน้านั้นและหาก "ไม่" ไม่ต้องทำอะไรเลย

จะทำอย่างไร? ข้อเสนอแนะใด ๆ


ฉันอาจจะมาช้า แต่นี่เป็นการป้องกันโดยเบราว์เซอร์ด้วยเหตุผล <br> <br> ลองนึกถึงตัวเองที่พยายามจะปิดหน้าต่างอีกครั้งและอีกครั้งและมันไม่ได้ปิดเหมือนการทำส่วน " ถ้าไม่ " จากคำถามของคุณซึ่ง คือ 'ไม่ทำอะไรเลย' <br> <br> นี่จะน่ารำคาญแน่ ๆ !
มูฮัมหมัดโอซา

คำตอบ:


503

คุณจะต้องใช้ Javascript ในการทำเช่นนี้ การใช้window.close():

close();

หมายเหตุ:แท็บปัจจุบันมีความหมาย สิ่งนี้เทียบเท่า:

window.close();

หรือคุณสามารถระบุหน้าต่างอื่น

ดังนั้น:

function close_window() {
  if (confirm("Close Window?")) {
    close();
  }
}

ด้วย HTML:

<a href="javascript:close_window();">close</a>

หรือ:

<a href="#" onclick="close_window();return false;">close</a>

คุณreturn falseที่นี่เพื่อป้องกันพฤติกรรมเริ่มต้นสำหรับเหตุการณ์ มิฉะนั้นเบราว์เซอร์จะพยายามไปที่ URL นั้น (ซึ่งไม่ชัดเจน)

ตอนนี้ตัวเลือกในwindow.confirm()กล่องโต้ตอบจะตกลงและยกเลิก (ไม่ใช่ใช่และไม่ใช่) หากคุณจริงๆต้องการใช่และไม่คุณจะต้องสร้างชนิดของคำกริยา Javascript กล่องโต้ตอบบาง

หมายเหตุ:มีความแตกต่างเฉพาะเบราว์เซอร์กับด้านบน หากคุณเปิดหน้าต่างด้วย Javascript (ผ่านwindow.open()) คุณจะได้รับอนุญาตให้ปิดหน้าต่างด้วย javascript Firefox ไม่อนุญาตให้คุณปิดหน้าต่างอื่น ฉันเชื่อว่า IE จะขอให้ผู้ใช้ยืนยัน เบราว์เซอร์อื่น ๆ อาจแตกต่างกันไป


387
คุณไม่สามารถปิดแท็บใดก็ได้ผ่านทาง JavaScript "วิธีนี้ใช้ได้เฉพาะกับหน้าต่างที่เปิดโดยสคริปต์โดยใช้วิธี window.open เท่านั้น" กล่าวอีกนัยหนึ่งคุณสามารถใช้ JavaScript เพื่อปิดหน้าต่าง / แท็บที่เกิดจาก JavaScript
Ryan Joy

7
-1 ไม่ทำงานกับ Chrome 30 PC คำตอบอื่น ๆ ที่แสดงเพื่อเปิดหน้าต่างในแท็บปัจจุบันแล้วปิดการทำงาน
markasoftware

2
ในabout:config dom.allow_scripts_to_close_windows = trueอาจเป็นทางออกใน Firefox (อาจเป็นความเสี่ยงด้านความปลอดภัยที่ยิ่งใหญ่!)
Nepomuk Frädrich

6
เบราว์เซอร์ไม่อนุญาตพฤติกรรมนี้ Javascript สามารถปิดแท็บที่เปิดได้เท่านั้น
Edward Kennedy

1
ใช้งานได้ (อย่างน้อย) ใน Chrome 62: <button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> ดูบทความนี้ด้วย
hering

247

ลองสิ่งนี้

<a href="javascript:window.open('','_self').close();">close</a>

2
ทำงานใน Firefox 31.0
Adrian Carr

1
ด้านที่ไม่ดีของโซลูชันนี้คือคำร้องขอรับถูกส่งไปยังเซิร์ฟเวอร์ แต่ในอีกด้านหนึ่งฉันไม่พบวิธีอื่นใด
100

18
การทำเช่นนี้จากคอนโซลคอนโซลของ Chrome จะส่งออก "สคริปต์อาจปิดเฉพาะหน้าต่างที่เปิดขึ้น"
รัฐสภา

ใช้งานไม่ได้ สคริปต์อาจปิดเฉพาะหน้าต่างที่เปิดไว้
Roman Losev

1
ไม่ทำงานใน chrome 60.0.3079.0: "สคริปต์อาจปิดเฉพาะหน้าต่างที่เปิดขึ้น"
Our_Benefactors

65

วิธีนี้ใช้ได้กับ Chrome และ IE:

<a href="blablabla" onclick="setTimeout(function(){var ww = window.open(window.location, '_self'); ww.close(); }, 1000);">
    If you click on this the window will be closed after 1000ms
</a>

56
เรียบง่าย:open(location, '_self').close();
uınbɐɥs

สิ่งนี้ทำงานได้ดีใน IE 11 แต่ไม่ทำงานใน Chrome 38
Yann Duran

31

เท่าที่ฉันสามารถบอกได้มันเป็นไปไม่ได้ใน Chrome หรือ FireFox อาจเป็นไปได้ใน IE (อย่างน้อย pre-Edge)


2
ใช้งานได้ (อย่างน้อย) ใน Chrome 62: <button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> ดูบทความนี้ด้วย
hering

@hering ดีบทความมาจากปี 2006 แต่ถ้าคุณพบบางสิ่งที่ใช้งานได้นั่นเป็นข่าวดีและอาจจะช่วยให้ผู้คนที่อ่านบทความนี้ห่างไกล ขอบคุณสำหรับการแบ่งปัน.
Guy Schalnat

คำถามเกี่ยวกับการปิดแท็บที่ใช้งานอยู่ในปัจจุบันจากภายในแท็บนั้น อย่างที่คุณพูดมันเป็นไปไม่ได้ใน Chrome หรือ Firefox นี่ควรเป็นคำตอบที่ยอมรับได้
ตัดสินใจ

14

มันเป็นไปได้. ฉันค้นหาเครือข่ายทั้งหมดเพื่อหาสิ่งนี้ แต่เมื่อฉันได้ทำแบบสอบถามของ Microsoft ฉันก็ได้รับคำตอบในที่สุด

ลองนี้:

window.top.close();

นี่จะปิดแท็บปัจจุบันให้คุณ


12
"สคริปต์อาจปิดเฉพาะหน้าต่างที่เปิดอยู่" ใน Chrome 50.
Husky

7

ทดสอบเรียบร้อยแล้วใน FF 18 และ Chrome 24:

ใส่ในหัว:

<script>
    function closeWindow() {
        window.open('','_parent','');
        window.close();
    }
</script> 

HTML:

<a href="javascript:closeWindow();">Close Window</a>

เครดิตไปที่มาร์กอสเจเป็ด


ไม่น่าเป็นห่วงเรื่องโครเมี่ยม "สคริปต์อาจปิดเฉพาะหน้าต่างที่เปิดขึ้นมาเท่านั้น"
Césarเลออน

7

ลองสิ่งนี้เช่นกัน ทำงานกับฉันในเบราว์เซอร์หลักทั้งสาม

<!-- saved from url=(0014)about:internet -->
<a href="#" onclick="javascript:window.close();opener.window.focus();" >Close Window</a>

ไม่ทำงานบน Firefox Quantum 68.0.1
Zeke

7

การทำงานต่อไปนี้สำหรับฉันใน Chrome 41:

function leave() {
  var myWindow = window.open("", "_self");
  myWindow.document.write("");
  setTimeout (function() {myWindow.close();},1000);
}

ฉันได้ลองแนวคิดหลายอย่างเกี่ยวกับ FF รวมถึงการเปิดหน้าเว็บจริง แต่ดูเหมือนไม่มีอะไรทำงาน เท่าที่ฉันเข้าใจเบราว์เซอร์ใด ๆ จะปิดแท็บหรือหน้าต่างด้วย xxx.close () ถ้าเปิดโดย JS จริงๆแต่อย่างน้อย FF ก็ไม่สามารถติดกับการปิดแท็บโดยการเปิดเนื้อหาใหม่ภายในแท็บนั้น

นั่นสมเหตุสมผลเมื่อคุณนึกถึงผู้ใช้อาจไม่ต้องการให้ JS ปิดแท็บหรือหน้าต่างที่มีประวัติที่มีประโยชน์


Chrome: 'Uncaught TypeError: ไม่สามารถตั้งค่าคุณสมบัติ' innerHTML 'ของ null'
Francisco Corrales Morales

5

ขออภัยที่ไม่สนับสนุนการทำสิ่งนี้ แต่เมื่อเร็ว ๆ นี้ฉันได้ติดตั้งเว็บไซต์ที่โฮสต์ในพื้นที่ซึ่งต้องการความสามารถในการปิดแท็บเบราว์เซอร์ปัจจุบันและพบวิธีแก้ปัญหาที่น่าสนใจที่ไม่มีเอกสารที่ดีพอที่จะหาได้

หมายเหตุ: การแก้ไขปัญหาเหล่านี้ทำโดยคำนึงถึงไซต์ที่โฮสต์ในเครื่องและ (ยกเว้น Edge) กำหนดให้เบราว์เซอร์ต้องได้รับการกำหนดค่าเฉพาะดังนั้นจึงไม่เหมาะสำหรับไซต์ที่โฮสต์สาธารณะ

บริบท:ในอดีตสคริปต์ jQuery window.close()สามารถปิดแท็บปัจจุบันโดยไม่มีปัญหากับเบราว์เซอร์ส่วนใหญ่ อย่างไรก็ตามเบราว์เซอร์สมัยใหม่ไม่สนับสนุนสคริปต์นี้อีกต่อไปอาจเป็นเพราะเหตุผลด้านความปลอดภัย

Google Chrome:

Chrome ไม่อนุญาตให้เรียกใช้สคริปต์ window.close () และจะไม่มีอะไรเกิดขึ้นหากคุณพยายามใช้ โดยใช้ปลั๊กอิน Chrome TamperMonkey อย่างไรก็ตามเราสามารถใช้วิธี window.close () หากคุณรวมไว้// @grant window.closeในส่วนหัว UserScript ของ TamperMonkey

ตัวอย่างเช่นสคริปต์ของฉัน (ซึ่งถูกเรียกใช้งานเมื่อมีการคลิกปุ่มที่มี id = 'close_page' และหากกด 'ใช่' บนป๊อปอัปของเบราว์เซอร์) ดูเหมือนว่า:

// ==UserScript==
// @name         Close Tab Script
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Closes current tab when triggered
// @author       Mackey Johnstone
// @match        http://localhost/index.php
// @grant        window.close
// @require      http://code.jquery.com/jquery-3.4.1.min.js
// ==/UserScript==

(function() {
    'use strict';
    $("#close_page").click(function() {
        var confirm_result = confirm("Are you sure you want to quit?");
        if (confirm_result == true) {
            window.close();
        }
    });
})();

หมายเหตุ:โซลูชันนี้สามารถปิดแท็บได้หากไม่ใช่แท็บสุดท้ายที่เปิดอยู่ ดังนั้นจึงไม่สามารถปิดแท็บได้หากจะทำให้หน้าต่างปิดโดยการเปิดแท็บสุดท้าย

Firefox:

Firefox มีการตั้งค่าขั้นสูงที่คุณสามารถเปิดใช้งานเพื่ออนุญาตให้สคริปต์เพื่อปิดหน้าต่างการเปิดใช้งานwindow.close()วิธีได้อย่างมีประสิทธิภาพ หากต้องการเปิดใช้งานการตั้งค่านี้ไปที่about: configจากนั้นค้นหาและค้นหาการกำหนดค่าตามความชอบdom.allow_scripts_to_close_windowsและเปลี่ยนจาก false เป็น true

สิ่งนี้อนุญาตให้คุณใช้window.close()เมธอดในไฟล์ jQuery โดยตรงเช่นเดียวกับสคริปต์อื่น ๆ

ตัวอย่างเช่นสคริปต์นี้ทำงานอย่างสมบูรณ์แบบด้วยการตั้งค่าที่ต้องการเป็นจริง:

<script>
  $("#close_page").click(function() {
    var confirm_result = confirm("Are you sure you want to quit?");
    if (confirm_result == true) {
      window.close();
    }
  });
</script>

วิธีนี้ใช้งานได้ดีกว่าวิธีแก้ปัญหาของ Chrome เนื่องจากผู้ใช้สามารถปิดแท็บปัจจุบันแม้ว่าจะเป็นแท็บเดียวเท่านั้นที่เปิดอยู่และไม่จำเป็นต้องใช้ปลั๊กอินของบุคคลที่สาม ข้อเสียอย่างหนึ่งก็คือมันช่วยให้สคริปต์นี้ทำงานโดยเว็บไซต์ต่าง ๆ (ไม่ใช่เฉพาะที่คุณตั้งใจจะใช้) ดังนั้นอาจเป็นอันตรายต่อความปลอดภัยแม้ว่าฉันไม่สามารถจินตนาการได้ว่าการปิดแท็บปัจจุบันเป็นอันตรายอย่างยิ่ง

ขอบ:

Disappointingly Edge ทำงานได้ดีที่สุดจากเบราว์เซอร์ทั้ง 3 ตัวที่ฉันลองใช้และทำงานกับwindow.close()วิธีการนี้โดยไม่ต้องมีการกำหนดค่าใด ๆ เมื่อwindow.close()สคริปต์ทำงานป๊อปอัพเพิ่มเติมจะเตือนคุณว่าหน้ากำลังพยายามปิดแท็บปัจจุบันและถามว่าคุณต้องการดำเนินการต่อหรือไม่

ป้อนคำอธิบายรูปภาพที่นี่

หมายเหตุสุดท้าย:โซลูชันสำหรับทั้ง Chrome และ Firefox เป็นวิธีการแก้ปัญหาสำหรับบางสิ่งที่เบราว์เซอร์ปิดใช้งานโดยเจตนาอาจมีเหตุผลด้านความปลอดภัย พวกเขาทั้งสองต้องการให้ผู้ใช้กำหนดค่าเบราว์เซอร์ของพวกเขาให้เข้ากันได้ก่อนมือดังนั้นจึงมีแนวโน้มที่จะไม่สามารถใช้งานได้กับไซต์ที่มีไว้สำหรับการใช้งานสาธารณะ

หวังว่านี่จะช่วยได้! :)


5

สำหรับผู้ที่ยังคงเข้าชมหน้านี้คุณจะได้รับอนุญาตให้ปิดแท็บที่เปิดโดยสคริปต์หรือโดยใช้แท็กจุดยึดของ HTML ที่มี _blank เป้าหมาย ทั้งสองสามารถปิดได้โดยใช้

<script>
    window.close();
</script>

สิ่งนี้ใช้ได้กับเบราว์เซอร์สมัยใหม่ทุกตัว IE11 และ Edge 17 แสดงการแจ้งเตือนยืนยัน แต่ก็ยังใช้งานได้
Fabian von Ellerts

1
<button class="closeButton" style="cursor: pointer" onclick="window.close();">Close Window</button>

สิ่งนี้ได้ผลสำหรับฉัน


1

สายไปหน่อย แต่นี่คือสิ่งที่ฉันค้นพบ ...

window.close()จะทำงานได้ (IE เป็นข้อยกเว้น) หากหน้าต่างที่คุณพยายามจะclose()เปิดโดยสคริปต์โดยใช้ window.open () วิธีการ

! (โปรดดูความคิดเห็นของ @killstreet ด้านล่างเกี่ยวกับจุดยึดแท็กกับเป้าหมาย _blank)

TLDR : chrome & firefox อนุญาตให้ปิดได้

คุณจะได้รับข้อผิดพลาดของคอนโซล: สคริปต์อาจไม่ปิดหน้าต่างที่ไม่ได้เปิดโดยสคริปต์ เป็นข้อผิดพลาดและไม่มีอะไรอื่น

คุณสามารถเพิ่มพารามิเตอร์ที่ไม่ซ้ำกันใน URL เพื่อทราบว่าหน้านั้นเปิดจากสคริปต์ (เช่นเวลา) - แต่เป็นการแฮ็กไม่ใช่การทำงานดั้งเดิมและจะล้มเหลวในบางกรณี

ฉันไม่สามารถหาวิธีที่จะรู้ว่าหน้าเปิดจาก open () หรือไม่และปิดจะไม่โยนและข้อผิดพลาด สิ่งนี้จะไม่พิมพ์ "ทดสอบ":

try{
  window.close();
}
catch (e){
  console.log("text");
}

คุณสามารถอ่านMDN เพิ่มเติมเกี่ยวกับฟังก์ชั่นปิด ()


2
มันไม่ใช่แค่แท็บที่เปิดโดยสคริปต์เท่านั้นและแท็ก anchor ที่มีเป้าหมาย _blank จะได้รับอนุญาตให้ปิด จนถึงการทดสอบในโครเมี่ยมและ Firefox และทั้งคู่ดูเหมือนจะอนุญาตให้ปิดแท็บที่เปิดโดยแท็กจุดยึด
killstreet

-1

นี่คือวิธีที่คุณจะสร้างลิงค์ดังกล่าว:

<a href="javascript:if(confirm('Close window?'))window.close()">close</a>


-1

นี่เป็นวิธีหนึ่งในการแก้ปัญหาเดียวกันประกาศฟังก์ชัน JavaScript เช่นนี้

<script>
  function Exit() {
     var x=confirm('Are You sure want to exit:');
     if(x) window.close();
   }
</script>

เพิ่มบรรทัดต่อไปนี้ใน HTML เพื่อเรียกใช้ฟังก์ชันโดยใช้ <button>

<button name='closeIt' onClick="Exit()" >Click to exit </Button>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.