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.close
tiê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.
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! :)