Làm cách nào để đóng tab hiện tại trong cửa sổ trình duyệt?


434

Tôi muốn tạo một liên kết trên một trang web sẽ đóng tab hiện đang hoạt động trong trình duyệt mà không đóng các tab khác trong trình duyệt.
Khi người dùng nhấp vào liên kết đóng, một thông báo cảnh báo sẽ xuất hiện yêu cầu người dùng xác nhận bằng hai nút "CÓ" và "KHÔNG". Nếu người dùng nhấp vào "CÓ", hãy đóng trang đó và Nếu "KHÔNG", không làm gì cả.

Nó được hoàn thiện bằng cách nào? Bất kỳ đề xuất?


Tôi có thể đến trễ nhưng điều này bị các trình duyệt ngăn chặn vì một lý do. <br> <br> Hãy nghĩ về việc bạn cố gắng đóng cửa sổ hết lần này đến lần khác và nó không đóng như là phần " nếu không " từ câu hỏi của bạn là "không làm gì cả". <br> <br> Điều này chắc chắn sẽ gây khó chịu!
Muhammad Osama

Câu trả lời:


502

Bạn sẽ cần Javascript để làm điều này. Sử dụng window.close():

close();

Lưu ý: tab hiện tại được ngụ ý. Điều này là tương đương:

window.close();

hoặc bạn có thể chỉ định một cửa sổ khác.

Vì thế:

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

với HTML:

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

hoặc là:

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

Bạn return falseở đây để ngăn chặn hành vi mặc định cho sự kiện. Nếu không, trình duyệt sẽ cố gắng truy cập URL đó (điều này rõ ràng là không).

Bây giờ các tùy chọn trên window.confirm()hộp thoại sẽ OK và Hủy bỏ (không phải Có và Không). Nếu bạn thực sự muốn Có và Không, bạn sẽ cần tạo một số loại hộp thoại Javascript phương thức.

Lưu ý: có sự khác biệt cụ thể của trình duyệt với ở trên. Nếu bạn đã mở cửa sổ bằng Javascript (thông qua window.open()) thì bạn được phép đóng cửa sổ bằng javascript. Firefox không cho phép bạn đóng các cửa sổ khác. Tôi tin rằng IE sẽ yêu cầu người dùng xác nhận. Các trình duyệt khác có thể khác nhau.


385
Bạn không thể đóng bất kỳ tab nào thông qua JavaScript. "Phương thức này chỉ được phép gọi cho các cửa sổ đã được mở bởi một tập lệnh bằng phương thức window.open." Nói cách khác, bạn chỉ có thể sử dụng JavaScript để đóng một cửa sổ / tab được sinh ra thông qua JavaScript.
Ryan Joy

7
-1 Không hoạt động chrome 30 PC các câu trả lời khác hiển thị để mở một cửa sổ trong tab hiện tại và sau đó đóng nó hoạt động
markasoftware

2
Trong about:config dom.allow_scripts_to_close_windows = truecó thể là giải pháp trong Firefox (có thể là một nguy cơ bảo mật lớn!)
Nepomuk Frädrich

6
Trình duyệt không cho phép hành vi này. Javascript chỉ có thể đóng một tab mà nó đã mở.
Edward Kennedy

1
Điều này hoạt động (ít nhất) trong Chrome 62: <button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> Xem thêm bài viết này
hering

247

Thử cái này

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

2
Làm việc trong Firefox 31.0
Adrian Carr

1
Mặt xấu của giải pháp này là yêu cầu get được gửi đến máy chủ. Nhưng ở phía bên kia, tôi không tìm thấy giải pháp nào khác.
100r

18
Làm điều này từ bảng điều khiển Chrome xuất ra "Tập lệnh chỉ có thể đóng các cửa sổ được mở bởi nó"
quốc hội

Không hoạt động. Các kịch bản có thể chỉ đóng các cửa sổ được mở bởi nó.
Roman Losev

1
Không hoạt động trong chrome 60.0.3079.0: "Tập lệnh chỉ có thể đóng các cửa sổ được mở bởi nó."
Our_Benefactors

65

Phương pháp này hoạt động trong Chrome và 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
Đơn giản hơn:open(location, '_self').close();
ngày

Điều này hoạt động tốt trong IE 11, nhưng không hoạt động trong Chrome 38
Yann Duran

31

Theo như tôi có thể nói, Chrome hoặc FireFox không còn có thể sử dụng được nữa. Nó vẫn có thể có trong IE (ít nhất là trước Edge).


2
Điều này hoạt động (ít nhất) trong Chrome 62: <button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> Xem thêm bài viết này
hering

@hering Vâng, bài viết là từ năm 2006, nhưng nếu bạn tìm thấy một cái gì đó hoạt động, đó là tin tức tuyệt vời và có lẽ sẽ giúp những người đọc đến nay. Cám ơn vì đã chia sẻ.
Guy Schalnat

Câu hỏi là về việc đóng tab hoạt động hiện tại từ trong tab đó. Như bạn nói, không thể có trong Chrome hoặc Firefox. Đây phải là câu trả lời được chấp nhận.
quyết định

14

Điều đó là có thể. Tôi đã tìm kiếm toàn bộ mạng cho cái này, nhưng một lần khi tôi tham gia một cuộc khảo sát của microsoft, cuối cùng tôi đã có câu trả lời.

thử cái này:

window.top.close();

Điều này sẽ đóng tab hiện tại cho bạn.


12
"Các tập lệnh có thể chỉ đóng các cửa sổ được mở bởi nó." trên Chrome 50.
Husky

7

Đã thử nghiệm thành công trong FF 18 và Chrome 24:

Chèn vào đầu:

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

HTML:

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

Tín dụng đến Marcos J. Drake .


Không nợ trên chrome "Tập lệnh chỉ có thể đóng các cửa sổ được mở bởi nó."
César León

7

Hãy thử điều này là tốt. Làm việc cho tôi trên cả ba trình duyệt chính.

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

không hoạt động trên Firefox Quantum 68.0.1
Zeke

7

Các công việc sau đây đối với tôi trong Chrome 41:

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

Tôi đã thử một vài ý tưởng cho FF bao gồm mở một trang web thực sự, nhưng dường như không có gì hoạt động. Theo tôi hiểu, bất kỳ trình duyệt nào cũng sẽ đóng một tab hoặc cửa sổ bằng xxx.close () nếu nó thực sự được mở bởi JS, nhưng FF, ít nhất, không thể bị lừa khi đóng một tab bằng cách mở nội dung mới bên trong tab đó.

Điều đó có ý nghĩa khi bạn nghĩ về nó - một người dùng có thể không muốn JS đóng một tab hoặc cửa sổ có lịch sử hữu ích.


Chrome: 'Uncaught TypeError: Không thể đặt thuộc tính' InternalHTML 'of null'
Francisco Corrales Morales

4

Xin lỗi vì đã xử lý vấn đề này, nhưng gần đây tôi đã triển khai một trang web được lưu trữ cục bộ cần khả năng đóng tab trình duyệt hiện tại và tìm thấy một số cách giải quyết thú vị không được ghi lại ở bất cứ nơi nào tôi có thể tìm thấy, vì vậy tôi đã tự mình làm điều đó.

Lưu ý: Các cách giải quyết này được thực hiện với một trang web được lưu trữ cục bộ và (ngoại trừ Edge) yêu cầu trình duyệt phải được định cấu hình cụ thể, do đó sẽ không lý tưởng cho các trang web được lưu trữ công khai.

Bối cảnh: Trước đây, tập lệnh jQuery window.close()có thể đóng tab hiện tại mà không gặp sự cố trên hầu hết các trình duyệt. Tuy nhiên, các trình duyệt hiện đại không còn hỗ trợ tập lệnh này, có khả năng vì lý do bảo mật.

Google Chrome:

Chrome không cho phép tập lệnh window.close () được chạy và không có gì xảy ra nếu bạn cố gắng sử dụng tập lệnh này. Tuy nhiên, bằng cách sử dụng plugin Chrome TamperMonkey, chúng tôi có thể sử dụng phương thức window.close () nếu bạn bao gồm // @grant window.closetiêu đề UserScript của TamperMonkey.

Ví dụ: tập lệnh của tôi (được kích hoạt khi một nút có id = 'close_page' được nhấp và nếu 'có' được nhấn trên cửa sổ bật lên của trình duyệt) trông giống như:

// ==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();
        }
    });
})();

Lưu ý: Giải pháp này chỉ có thể đóng tab nếu KHÔNG phải là tab cuối cùng mở. Vì vậy, hiệu quả, nó không thể đóng tab nếu nó sẽ khiến cửa sổ đóng lại bằng cách mở tab cuối cùng.

Firefox:

Firefox có một cài đặt nâng cao mà bạn có thể kích hoạt để cho phép các tập lệnh đóng các cửa sổ, cho phép window.close()phương thức này hoạt động hiệu quả . Để bật cài đặt này, hãy chuyển đến about: config, sau đó tìm kiếm và tìm tùy chọn dom.allow_scripts_to_close_windows và chuyển nó từ false thành true.

Điều này cho phép bạn sử dụng window.close()phương thức trực tiếp trong tệp jQuery của mình như bất kỳ tập lệnh nào khác.

Ví dụ: tập lệnh này hoạt động hoàn hảo với tùy chọn được đặt thành true:

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

Điều này hoạt động tốt hơn nhiều so với cách giải quyết của Chrome vì nó cho phép người dùng đóng tab hiện tại ngay cả khi đó là tab duy nhất mở và không yêu cầu plugin của bên thứ ba. Tuy nhiên, một nhược điểm là nó cũng cho phép tập lệnh này được chạy bởi các trang web khác nhau (không chỉ trang web bạn định sử dụng) nên có thể gây nguy hiểm về bảo mật, mặc dù tôi không thể tưởng tượng việc đóng tab hiện tại đặc biệt nguy hiểm.

Cạnh:

Thất vọng khi Edge thực sự hoạt động tốt nhất trong cả 3 trình duyệt tôi đã thử và làm việc với window.close()phương thức mà không yêu cầu bất kỳ cấu hình nào. Khi window.close()tập lệnh được chạy, một cửa sổ bật lên bổ sung sẽ thông báo cho bạn rằng trang đang cố đóng tab hiện tại và hỏi bạn có muốn tiếp tục không.

nhập mô tả hình ảnh ở đây

Lưu ý cuối cùng: Các giải pháp cho cả Chrome và Firefox là giải pháp cho một cái gì đó mà các trình duyệt cố tình vô hiệu hóa, có khả năng vì lý do bảo mật. Cả hai cũng yêu cầu người dùng cấu hình trình duyệt của họ để tương thích trước khi sử dụng, do đó có thể không khả thi đối với các trang web dành cho sử dụng công cộng, nhưng lý tưởng cho các giải pháp được lưu trữ cục bộ như của tôi.

Hy vọng điều này sẽ giúp! :)


4

Đối với những người vẫn đang truy cập trang này, bạn chỉ được phép đóng một tab được mở bởi tập lệnh HOẶC bằng cách sử dụng thẻ neo của HTML với mục tiêu _blank. Cả hai đều có thể được đóng lại bằng cách sử dụng

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

Điều này hoạt động trong mọi trình duyệt hiện đại. IE11 và Edge 17 hiển thị cảnh báo xác nhận nhưng nó vẫn hoạt động.
Fabian von Ellerts

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

điều này đã làm việc cho tôi


1

hơi muộn nhưng đây là những gì tôi phát hiện ra ...

window.close()sẽ chỉ hoạt động (IE là một ngoại lệ) nếu cửa sổ mà bạn đang cố close()mở bằng một tập lệnh bằng phương thức window.open ().

! (vui lòng xem nhận xét của @killstreet bên dưới về thẻ neo với mục tiêu _blank)

TLDR : chrome & firefox cho phép đóng chúng.

bạn sẽ gặp lỗi bảng điều khiển: Tập lệnh có thể không đóng các cửa sổ không được mở bởi tập lệnh. như một lỗi và không có gì khác.

bạn có thể thêm một tham số duy nhất trong URL để biết liệu trang có được mở từ tập lệnh hay không (như thời gian) - nhưng đó chỉ là một bản hack chứ không phải chức năng gốc và sẽ thất bại trong một số trường hợp.

Tôi không thể tìm thấy bất kỳ cách nào để biết liệu trang đã được mở từ một mở () hay không, và đóng sẽ không ném và lỗi. cái này sẽ KHÔNG in "test":

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

bạn có thể đọc trong MDN nhiều hơn về hàm close ()


2
Đó không chỉ là các tab đã được mở bởi các tập lệnh, mà cả thẻ neo với mục tiêu _blank sẽ được phép đóng. Cho đến nay đã được thử nghiệm trong chrome và firefox và cả hai dường như cho phép đóng các tab đã được mở bằng thẻ neo.
killstreet

-1

Đây là cách bạn sẽ tạo một liên kết như vậy:

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


-1

Đây là một cách giải quyết tương tự, khai báo hàm JavaScript như thế này

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

Thêm dòng sau vào HTML để gọi hàm bằng cách sử dụng <button>

<button name='closeIt' onClick="Exit()" >Click to exit </Button>
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.