Làm cách nào để đóng cửa sổ trình duyệt mà không nhận được lời nhắc "Bạn có muốn đóng cửa sổ này"?


86

Làm cách nào để đóng cửa sổ trình duyệt mà không nhận được lời nhắc Bạn có muốn đóng cửa sổ này không?

Lời nhắc xảy ra khi tôi sử dụng window.close();hàm.


22
đơn giản nhất:window.open('','_self').close()
markasoftware

Trong Firefox, tất cả điều này có thể được tranh luận nếu người dùng tắt tính năng đóng cửa sổ. kb.mozillazine.org/…
Brian

3
Trừ khi bạn sở hữu cửa sổ cho mình, bạn không nên.
Robert Harvey

Câu trả lời:


85
window.open('', '_self', ''); window.close();

Điều này làm việc cho tôi.


Hoạt động cho IE11, Safary 5.1.7, nhưng không hoạt động trong FF và Chrome.
nikolai.serdiuk

Làm việc trong Firefox 38.0.5 và Chrome 43
justanotherprogrammer

điều gì sẽ xảy ra nếu cửa sổ được mở bằng cách sử dụng showModalDialog? Nó không làm việc trên IE10
bjan

Không chắc liệu điều này có hoạt động trên tất cả các trình duyệt hay không, nhưng nó hoạt động trên IE11 !!! Hiện tại, chúng tôi phải xây dựng trình duyệt nào. Cảm ơn bạn vì câu trả lời này, bạn đã cứu tôi rất nhiều rắc rối.
CrazyPaste

Hoạt động tốt trong IE 11, Chrome 76.0.3809, Firefox 69.0
Rahul Mahadik

57

Bạn ơi ... có một cách nhưng "hack" thì không diễn tả nổi. Về cơ bản, bạn phải khai thác một lỗi trong IE 6 & 7.

Hoạt động mọi lúc!

Thay vì gọi window.close(), hãy chuyển hướng đến một trang khác.

Trang mở đầu:

alert("No whammies!");
window.open("closer.htm", '_self');

Chuyển hướng đến một trang khác. Điều này đánh lừa IE khi cho phép bạn đóng trình duyệt trên trang này.

Trang kết thúc:

<script type="text/javascript">
    window.close();
</script>

Tuyệt vời phải không ?!


1
Tôi biết đã được 2 năm rồi. Nhưng nó amazing..Works trên IE 8 và firefox 15
Susie

9
Có vẻ như Microsoft đã sửa lỗi này trong IE10. Có ai biết làm thế nào chúng tôi vẫn có thể đạt được điều này trong IE10 không?
Abhi Rampal

Cả self.close () và window.close () đều không hoạt động với IE bên mình. Tuy nhiên, Chrome, FF và Safari vẫn ổn
NoName.

57

Tập lệnh không được phép đóng cửa sổ mà người dùng đã mở. Đây được coi là một rủi ro bảo mật. Mặc dù nó không theo bất kỳ tiêu chuẩn nào, nhưng tất cả các nhà cung cấp trình duyệt đều tuân theo điều này (Tài liệu về Mozilla ). Nếu điều này xảy ra trong một số trình duyệt, đó là một lỗi bảo mật (lý tưởng là) được vá rất nhanh.

Không có cách hack nào trong các câu trả lời cho câu hỏi này còn hoạt động nữa và nếu ai đó nghĩ ra một cách hack bẩn thỉu khác, thì cuối cùng nó cũng sẽ ngừng hoạt động.

Tôi khuyên bạn không nên lãng phí sức lực để chống lại điều này và nắm lấy phương pháp mà trình duyệt rất hữu ích cung cấp cho bạn - hãy hỏi người dùng trước khi bạn dường như làm hỏng trang của họ.


5
Hoặc, thậm chí đơn giản hơn: Không đóng cửa sổ nào cả. Nếu bạn đã hoàn tất, hãy đưa người dùng trở lại trang chủ của bạn hoặc đến một số vị trí trung tâm khác.
duskwuff -inactive-

2
@duskwuff, Chúng tôi đang chạy thử nghiệm tự động đối với các trình duyệt này. Họ cần phải đóng cửa .
ouflak

2
@ouflak Chắc chắn khung thử nghiệm của bạn có một số cách để thao tác các cửa sổ.
duskwuff -inactive-

1
@duskwuff Còn các thư viện của bên thứ ba để lại các cửa sổ nằm xung quanh thì sao? Bạn chắc chắn không thể gợi ý rằng tôi chỉ để lại mớ hỗn độn đó cho người dùng hoặc chuyển hướng họ đến một chế độ xem (trùng lặp) của trang chủ.
Giỏ hàng bị bỏ rơi vào

1
Bạn cũng có thể giải thích trong câu trả lời của mình dưới dạng chú thích, tại sao nó lại có nguy cơ bảo mật.
T.Todua

31

Đây là hàm Javascript mà tôi sử dụng để đóng trình duyệt mà không có Lời nhắc hoặc Cảnh báo, nó cũng có thể được gọi từ Flash. Nó phải ở trong tệp html.

    function closeWindows() {
         var browserName = navigator.appName;
         var browserVer = parseInt(navigator.appVersion);
         //alert(browserName + " : "+browserVer);

         //document.getElementById("flashContent").innerHTML = "<br>&nbsp;<font face='Arial' color='blue' size='2'><b> You have been logged out of the Game. Please Close Your Browser Window.</b></font>";

         if(browserName == "Microsoft Internet Explorer"){
             var ie7 = (document.all && !window.opera && window.XMLHttpRequest) ? true : false;  
             if (ie7)
             {  
               //This method is required to close a window without any prompt for IE7 & greater versions.
               window.open('','_parent','');
               window.close();
             }
            else
             {
               //This method is required to close a window without any prompt for IE6
               this.focus();
               self.opener = this;
               self.close();
             }
        }else{  
            //For NON-IE Browsers except Firefox which doesnt support Auto Close
            try{
                this.focus();
                self.opener = this;
                self.close();
            }
            catch(e){

            }

            try{
                window.open('','_self','');
                window.close();
            }
            catch(e){

            }
        }
    }

Trên IE 10.0.9200, mở cửa sổ bằng showModalDialog. Bật closeWindows, Nó sẽ mở ra một cửa sổ mới (cùng một trang) trong khi cửa sổ trước đó vẫn đang mở.
bjan

Không hoạt động trên Firefox, IE / Edge hiển thị lời nhắc xác nhận - mặc dù nó hoạt động trên Chrome.
Dymas

12

Điều này hoạt động trong Chrome 26, Internet Explorer 9 và Safari 5.1.7 ( mà không cần sử dụng trang trợ giúp, ala Nick trả lời):

<script type="text/javascript">
    window.open('javascript:window.open("", "_self", "");window.close();', '_self');
</script>

Việc lồng vào nhau window.openlà làm cho IE không hiển thị lời nhắc Bạn có muốn đóng cửa sổ này không .

Thật không may, không thể khiến Firefox đóng cửa sổ.


Cũng hoạt động cho IE 10.
Mukus

11

Trong thẻ nội dung:

<body onload="window.open('', '_self', '');">

Để đóng cửa sổ:

<a href="javascript:window.close();">

Đã thử nghiệm trên Safari 4.0.5, FF cho Mac 3.6, IE 8.0 và FF cho Windows 3.5


Về mặt chức năng, đó là điều mà Nick đã làm.
naugtur

Đúng. Nếu tôi đang đọc bài đăng của Nick một cách chính xác, anh ấy sẽ gợi ý chuyển hướng trước khi gọi window.close. Những gì tôi đã đăng là nếu bạn không muốn sử dụng chuyển hướng. Nếu tôi đọc sai bài đăng của Nick, xin lỗi.
JimB

7

Vì lý do bảo mật, chỉ có thể đóng một cửa sổ bằng JavaScript nếu nó được mở bằng JavaScript. Để đóng cửa sổ, bạn phải mở một cửa sổ mới với _selfmục tiêu, cửa sổ này sẽ ghi đè cửa sổ hiện tại của bạn, sau đó đóng cửa sổ đó (bạn có thể làm vì nó được mở qua JavaScript).

window.open('', '_self', '');
window.close();

điều này đã làm việc với tôi với Silverlight: HtmlPage.Window.Eval ("window.open ('', '_self', ''); window.close ();");
Mike Fuchs

6

Từ đây :

<a href="javascript:window.opener='x';window.close();">Close</a>

Bạn cần phải thiết lập window.openermột cái gì đó, nếu không nó sẽ phàn nàn.


Làm việc cho tôi, gần 7 năm sau trên Chrome, FF và IE 10.
Mike Devenney

6

window.open('', '_self', '').close();

Xin lỗi hơi muộn ở đây, nhưng tôi đã tìm ra giải pháp, ít nhất là cho trường hợp của tôi. Đã thử nghiệm trên Safari 11.0.3 và Google Chrome 64.0.3282.167


5

Do các cải tiến bảo mật trong IE, bạn không thể đóng một cửa sổ trừ khi nó được mở bằng tập lệnh. Vì vậy, cách giải quyết vấn đề này là để trình duyệt nghĩ rằng trang này được mở bằng một tập lệnh, sau đó đóng cửa sổ. Dưới đây là cách thực hiện.

Hãy thử điều này, nó hoạt động như một sự quyến rũ!
javascript đóng cửa sổ hiện tại mà không cần IE nhắc nhở

<script type="text/javascript">
function closeWP() {
 var Browser = navigator.appName;
 var indexB = Browser.indexOf('Explorer');

 if (indexB > 0) {
    var indexV = navigator.userAgent.indexOf('MSIE') + 5;
    var Version = navigator.userAgent.substring(indexV, indexV + 1);

    if (Version >= 7) {
        window.open('', '_self', '');
        window.close();
    }
    else if (Version == 6) {
        window.opener = null;
        window.close();
    }
    else {
        window.opener = '';
        window.close();
    }

 }
else {
    window.close();
 }
}
</script>

javascript đóng cửa sổ hiện tại mà không cần IE nhắc


2

Tạo một hàm JavaScript

<script type="text/javascript">
    function closeme() {
        window.open('', '_self', '');
        window.close();
    }
</script>

Bây giờ viết mã này và gọi hàm JavaScript ở trên

<a href="Help.aspx" target="_blank" onclick="closeme();">Help</a>

Hoặc đơn giản:

<a href="" onclick="closeme();">close</a>

2

Điều này sẽ hoạt động:

<script type="text/javascript">
function closeWindowNoPrompt()
{
window.open('', '_parent', '');
window.close();
}
</script>

Làm việc bằng cách triển khai Python Eel's Chrome.
revliscano


0

Trình duyệt đang phàn nàn vì bạn đang sử dụng JavaScript để đóng một cửa sổ không được mở bằng JavaScript window.open('foo.html');.


0

Giải pháp tốt nhất tôi đã tìm thấy là:

this.focus();
self.opener=this;
self.close();

0

Đặt mã sau vào ASPX.

<script language=javascript>
function CloseWindow() 
{
    window.open('', '_self', '');
    window.close();
}
</script>

Đặt mã sau vào mã đằng sau sự kiện nhấp vào nút.

string myclosescript = "<script language='javascript' type='text/javascript'>CloseWindow();</script>";

Page.ClientScript.RegisterStartupScript(GetType(), "myclosescript", myclosescript);

Nếu bạn không có bất kỳ xử lý nào trước khi đóng thì bạn có thể đặt trực tiếp mã sau vào chính ASPX trong thẻ nhấp vào nút.

OnClientClick="CloseWindow();"

Hi vọng điêu nay co ich.


Các câu hỏi yêu cầu một giải pháp javascript đơn giản, tránh ASPX.
Zeeshan

@Zeeshan: Bất kỳ nhà phát triển nào đáng giá muối của họ đều có thể thấy rằng JavaScript ở đầu bài đăng của Kamleshkumar Gujarathi có thể được áp dụng cho yêu cầu của riêng họ. Một cú chạm khắc nghiệt nếu bạn từ chối câu trả lời của anh ấy.
Paul

0

Trong tình huống của tôi, đoạn mã sau đã được nhúng vào tệp php.

var PreventExitPop = true;
function ExitPop() {
  if (PreventExitPop != false) {
    return "Hold your horses! \n\nTake the time to reserve your place.Registrations might become paid or closed completely to newcomers!"
  }
}
window.onbeforeunload = ExitPop;

Vì vậy, tôi đã mở bảng điều khiển và viết như sau

PreventExitPop = false

Điều này đã giải quyết vấn đề. Vì vậy, hãy tìm mã JavaScript và tìm (các) biến và gán chúng cho một "giá trị" thích hợp mà trong trường hợp của tôi là "sai"


-3

Tôi sẽ đăng cái này vì đây là những gì tôi hiện đang sử dụng cho trang web của mình và nó hoạt động trên cả Google Chrome và IE 10 mà không nhận được bất kỳ thông báo bật lên nào:

<html>
    <head>
    </head>
    <body onload="window.close();">
    </body>
</html>

Tôi có một chức năng trên trang web của mình mà tôi muốn chạy để lưu một biến bật / tắt vào phiên mà không cần trực tiếp truy cập trang mới nên tôi chỉ cần mở một trang web bật lên nhỏ. Trang web đó sau đó sẽ tự đóng ngay lập tức với onload="window.close();"hàm.


Có: nhưng như thông tin stackoverflow.com/a/24854246/2239406 : bạn mở windo bằng javascript, sau đó có thể đóng bằng javascript.
Denis Chenu

tốt, nếu nó không hoạt động và nếu điều này đã được 'vá', nó vẫn hoạt động trên tất cả các trình duyệt trên máy tính của tôi mà không bị lỗi. Tôi chỉ đơn giản là cung cấp một giải pháp hiện đang làm việc cho tôi.
Logan Hasbrouck

Sự khác biệt là: bạn mở cửa sổ trong JS. Nếu cửa sổ si không mở trong JS: không hoạt động.
Denis Chenu

Không, tôi không sử dụng JS để mở cửa sổ; đúng hơn là tôi đang sử dụng awith target=_blankđể mở một cửa sổ bật lên nhỏ tại một url cụ thể, sau đó cuối cùng tôi sử dụng JS để đóng cửa sổ. Mục đích là url cụ thể lưu một giá trị vào phiên để vô hiệu hóa hình nền, mặc dù ở đây tôi sẽ sớm xóa nó theo hướng có lợi cho ajax sau khi tôi tìm ra cách thực hiện ajax. (vẫn đang học những sợi dây thừng persay)
Logan Hasbrouck
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.