201

問題は、呼び出すとき、window.close()またはself.close()ウィンドウが閉じないことです。現在、Chrome では、スクリプトで作成されていないウィンドウをスクリプトで閉じることはできないという信念があるようです。それは明らかに間違っていますが、確認のためにアラートをポップアップする必要があるとしても、それでもそれを行うはずです. これらは起こっていません。

だから、誰かが実際に機能的で実証済みの方法を使ってウィンドウを閉じる方法を持っている人はいますjavascript:window.close()javascript:self.close()? どんな提案でも大歓迎です.Javascript固有のソリューションを探しています.JQueryやサードパーティの実装はありません.

更新:提案されたものの多くには重大な制限と使いやすさの問題がありますが、スクリプト ヘッダーで使用する最新の提案 (TamperMonkey に固有)// @grant window.closeは、通常は close メソッドを処理できないタブでも、多くの場合うまくいきます。完全に理想的ではなく、すべてのケースに一般化されているわけではありませんが、私の場合は良い解決策です。

4

17 に答える 17

34

Chrome バージョン 36.0.1985.125 のセキュリティの問題を修正しました

Chrome 36.0.1985.125 2014 年 7 月 16 日水曜日 リリース ノート

window.close()私の観察によると、この更新により、ポップアップ ウィンドウを閉じるために使用する際の問題が修正されました。失敗すると、「スクリプトは、それによって開かれたウィンドウのみを閉じる可能性があります。」というメッセージがコンソールに表示されます。つまり、ハッキーな回避策(Brock Adams の回答)は最新のリリースでは機能しない可能性があります。

そのため、以前にリリースされた Chrome のビルドでは、以下のコード ブロックが機能していた可能性がありますが、今回の更新では機能しません。

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

この更新では、ポップアップ ウィンドウを閉じるようにコードを更新する必要があります。解決策の 1 つは、ポップアップ ウィンドウ ID を取得して使用することです。

chrome.windows.remove(integer windowId, function callback)

それを取り除く方法。Chrome 拡張 Windows API はchrome.windowsにあります。

実際、私の Chrome 拡張機能MarkViewはこの問題に直面しており、この Chrome Update で機能するようにコードを更新する必要がありました。ちなみに、MarkView は Awesome Markdown ファイルを読み書きするためのツールで、コンテンツ アウトライン、並べ替え可能なテーブル、行番号付きのコード ブロック構文ハイライトなどの機能を提供します。

この投稿も作成しました。コメントは大歓迎です。

于 2014-07-20T23:11:15.767 に答える
24

タンパーモンキーで使用できるようになりました

// @grant        window.close

そして、単に呼び出すだけです

window.close();
于 2016-01-19T11:30:15.217 に答える
21

これが機能するための要件:

ウィンドウランチャースクリプトを介して開かれなかったタブでは常に機能するとは限らないため、JavaScriptハンドルを取得して機能させるには、ウィンドウランチャーからウィンドウ/タブを開く必要があります。このテスト ページでは、次の方法を示します。

http://browserstrangeness.bitbucket.io/window_close_tester.htm

私のランチャーから動作しない場合は、ブラウザ、デバイス、およびバージョンを投稿する必要があります。異なるバージョンのブラウザーは、異なるデバイスで異なる動作をします。(iPad 上の Firefox や Chrome など、彼らが言うものとは異なります。それらは、異なるスキンの Safari です!)

したがって、たとえば「私は iOs 14.5 を使用する iPad で Safari 10.14 を使用しています」と言うことが重要です。そうすれば、私 (またはスタックオーバーフローの他の有益な個人) があなたのためにそれを調査し、結果を投稿して他のユーザーを助けることができます。ありがとうございます。ランチャーを使用し、それが私の例で機能する場合は、機能します。

私は Brock Adams によって投稿された方法を使用していますが、ボタンまたは別のウィンドウからのリンクによってユーザーが起動した場合、Firefox でも機能します。

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

ボタンを押して呼び出すので、ユーザーが開始します。Chrome 90、Internet Explorer 11、Edge、Safari 7-10、および Firefox 35 と 88 を使用しても問題なく動作します。Windows のバージョン 8.1 と 10 を使用してテストしましたMac OS X 10.6、10.9 & 10.10 & 10.14 が異なる場合。


自己終了ウィンドウ コード (自動的に終了するページ上)

それ自体を閉じることができるユーザーが開いたウィンドウで使用される完全なコード:

window_to_close.htm

JavaScript:

function quitBox(cmd)
{   
    if (cmd=='quit')
    {
        open(location, '_self').close();
    }   
    return false;   
}

HTML:

<input type="button" name="Quit" id="Quit" value="Quit" onclick="return quitBox('quit');" />

これは、実際の例を含むそのテストページです: (Chrome 90.0 と Firefox 88.0 でテスト済み - Windows 10 と Mac 10.14 Mojave の両方)

http://browserstrangeness.bitbucket.io/window_close_tester.htm


Window Opener Code (上記のページを開くページ上)

これを機能させるには、セキュリティが課せられたクロス ブラウザー互換性により、閉じられるウィンドウが、ユーザーが同じサイト ドメイン内のボタンをクリックすることによって既に開かれている必要があります。

たとえば、上記のメソッドを使用して閉じるウィンドウは、このコードを使用してページから開くことができます (コードは、上記のリンクにあるサンプル ページから提供されています)。

window_close_tester.htm

JavaScript:

function open_a_window() 
{
    window.open("window_to_close.htm"); 

    return false;
}

HTML:

<input type="button" onclick="return open_a_window();" value="Open New Window/Tab" />
于 2014-05-15T13:30:00.550 に答える
13

多くの人が、javascript を使用して Chrome ブラウザを閉じる方法を見つけようとしています。次の方法は、Chrome を APP ランチャーとして使用する場合にのみ機能します (キオスクなど)。

私は以下をテストしました:

次の拡張機能を使用しています:キオスクを閉じる

私は使用方法に従っていますが、問題なく動作しているようです (テストの実行中にキャッシュをクリアしてください)。私が使用するJavaScriptは(クリックイベントに添付)です:

window.location.href = '/closekiosk';

それが私が見つけた唯一の実用的な解決策であるため、誰かの助けになることを願っています。

注: 拡張機能はバックグラウンドで実行され、Chrome トレイ アイコンが追加されるようです。次のオプションがチェックされています:「Chromeをバックグラウンドで実行する」(または同様のテキスト)。それがうまくいくまで、それで遊ぶ必要があるかもしれません。チェックを外したところ、問題なく動作するようになりました!

于 2014-08-05T18:30:10.457 に答える
12

私は完璧に機能する新しい方法を見つけました

var win = window.open("about:blank", "_self");
win.close();
于 2014-12-03T23:18:27.610 に答える
2

これは古いかもしれませんが、答えましょう。

タブを閉じるにはtop.close()を使用します。window.close()またはその他の open...close は機能しませんでした。

于 2014-08-10T13:32:05.980 に答える
2

この問題で私の「解決策」を共有したかったのです。私たちのほとんどは、標準的なブラウザ セッションでブラウザ ウィンドウを閉じようとしているように思えます。このセッションでは、ユーザーが別の Web サイトにアクセスした後、別の Web サイトにアクセスする前に、別の Web サイトにアクセスしています。

ただし、私の状況では、基本的にデバイスが行う唯一のことになるデバイス用の Web アプリを構築しています。起動すると、Chrome が起動し、アプリに移動します。インターネットにも接続されておらず、通信するサーバーはローカルの Docker コンテナー上にあります。ユーザーは、端末にアクセスしてシステム アップデートを実行できるように、アプリを閉じる方法 (Chrome を閉じる方法) が必要です。

そのため、起動し、キオスク モードで Chrome を起動します。既に正しいアドレスが指定されています。これはたまたま、仕様の 2 番目のオプションを簡単に満たします。

ブラウジング コンテキストは、(ユーザーのアクションではなく) スクリプトによって作成された補助的なブラウジング コンテキストである場合、またはセッション履歴にドキュメントが 1 つしか含まれていない最上位のブラウジング コンテキストである場合、スクリプトで閉じることができます。

したがってwindow.close()、キオスク アプリから電話をかけるだけで機能します。

于 2020-02-13T17:57:28.017 に答える
-1

以下の私のコードを使用することもできます。これは、親ウィンドウをリダイレクトするのにも役立ちます。

親:

<script language="javascript">

function open_a_window() 
{
    var w = 200;
        var h = 200;
        var left = Number((screen.width/2)-(w/2));
        var tops = Number((screen.height/2)-(h/2));

        window.open("window_to_close.html", '', 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width='+w+', height='+h+', top='+tops+', left='+left);

   return false;
}

// opener:
window.onmessage = function (e) {
  if (e.data === 'location') {
    window.location.replace('https://www.google.com');
  }
};

</script>

<input type="button" onclick="return open_a_window();" value="Open New Window/Tab" />

現れる:

<!DOCTYPE html>
<html>
<body onload="quitBox('quit');">

<h1>The window closer:</h1>

<input type="button" onclick="return quitBox('quit');" value="Close This Window/Tab" /> 


<script language="javascript">

function quitBox(cmd) 
{      
    if (cmd=='quit')    
    {   
       window.opener.postMessage('location', '*');
       window.open(location, '_self').close();    
    }     
    return false;   
}

</script>

</body>
</html>
于 2019-12-05T10:48:35.463 に答える
-2

上で述べたように、window.open() を使用して新しいウィンドウを開いた場合にのみ、コードを使用して新しいウィンドウを閉じることができます。これは私にとっては完璧に機能します:) 注: href を使用してページを新しいタブで開かないでください。Window.close() は "href" では機能しません。代わりに window.open() を使用してください。

于 2015-05-28T15:56:15.900 に答える