ブラウザウィンドウで現在のタブを閉じる方法は?


436

ブラウザの他のタブを閉じずに、ブラウザの現在アクティブなタブを閉じるリンクをWebページに作成したいと考えています。
ユーザーが閉じるリンクをクリックすると、「はい」と「いいえ」の2つのボタンで確認を求める警告メッセージが表示されます。ユーザーが「はい」をクリックした場合はそのページを閉じ、「いいえ」の場合は何もしません。

どうすればできますか?助言がありますか?


私は後半にここにあるかもしれないが、これは理由のブラウザによって阻止される。<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()ダイアログボックスのオプションは[はい]と[いいえ]ではなく[OK]と[キャンセル]になります。「はい」と「いいえ」が本当に必要な場合は、なんらかのモーダルJavascriptダイアログボックスを作成する必要があります。

注:上記とブラウザ固有の違いがあります。JavaScriptで(を介してwindow.open())ウィンドウを開いた場合、JavaScriptでウィンドウを閉じることができます。Firefoxでは、他のウィンドウを閉じることができません。IEがユーザーに確認を求めると思います。他のブラウザは異なる場合があります。


387
JavaScriptを使用してタブを閉じることはできません。「このメソッドは、window.openメソッドを使用してスクリプトによって開かれたウィンドウに対してのみ呼び出すことができます。」つまり、JavaScriptを使用して作成できるのは、JavaScriptを介して生成されたウィンドウまたはタブのみです。
ライアンジョイ

7
-1動作しないクロム30 PC他の回答が現在のタブでウィンドウを開いてから閉じるように示している
markasoftware

2
about:config dom.allow_scripts_to_close_windows = trueFirefoxでソリューションが(大きなセキュリティリスクであるかもしれない!)かもしれない
ネポムクFrädrich

6
ブラウザーはこの動作を許可しません。JavaScriptは、開いたタブのみを閉じることができます。
エドワードケネディ

1
クローム62のこの作品は、(少なくとも):<button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> また、この記事を参照してください
ヘリング

247

これを試して

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

2
Firefox 31.0での作業
Adrian Carr

1
このソリューションの悪い面は、取得リクエストがサーバーに送信されることです。しかし、反対に、他の解決策は見つかりませんでした。
100r

18
Chromeコンソールからこれを行うと、「スクリプトは、それによって開かれたウィンドウのみを閉じる可能性があります」
議会議会

動作しません。スクリプトは、それによって開かれたウィンドウのみを閉じることができます。
Roman Losev 2016年

1
Chrome 60.0.3079.0で機能しない:「スクリプトは、それによって開かれたウィンドウのみを閉じる場合があります。」
Our_Benefactors 2017

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でもまだ可能です(少なくともEdge以前)。


2
クローム62のこの作品は、(少なくとも):<button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> また、この記事を参照してください
ヘリング

@heringまあ、記事は2006年からですが、うまくいくものを見つけた場合、それは素晴らしいニュースであり、おそらくこれまで読んだ人を助けるでしょう。共有いただきありがとうございます。
Guy Schalnat

問題は、そのタブ内から現在アクティブなタブを閉じることでした。あなたが言うように、それはChromeやFirefoxでは不可能です。これは受け入れられる答えになるはずです。
2018

14

可能です。私はこれをネット全体で検索しましたが、マイクロソフトの調査の1つを行ったときに、ようやく答えが得られました。

これを試して:

window.top.close();

これにより、現在のタブが閉じます。


12
「スクリプトは、それによって開かれたウィンドウのみを閉じる場合があります。」クローム50上
ハスキー

7

FF 18とChrome 24で正常にテストされました:

頭に挿入:

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

HTML:

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

クレジットはMarcos J. Drakeに送られます。


「スクリプトは、それによって開かれたウィンドウのみを閉じる可能性があります。」
セザールレオン

7

これも試してみてください。3つの主要ブラウザすべてで私のために働いています。

<!-- 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);
}

私は実際のWebページを開くことを含むFFのいくつかのアイデアを試しましたが、何も機能しないようです。私が理解している限り、ブラウザが本当に xxx.close()でタブまたはウィンドウを閉じます JSによって開かれたが、少なくともFFは、そのタブ内の新しいコンテンツを開いてタブを閉じることはできません。

あなたがそれについて考えるとき、それは理にかなっています-ユーザーがJSが有用な履歴を持つタブまたはウィンドウを閉じることを望まないかもしれません。


Chrome: 'Uncaught TypeError:プロパティ' innerHTML 'of null'を設定できません '
Francisco Corrales Morales

5

これをネクロポストして申し訳ありませんが、最近、現在ホストされているブラウザのタブを閉じる機能を必要とするローカルにホストされたサイトを実装しました。

注意:これらの回避策はローカルにホストされたサイトを念頭に置いて行われ、(Edgeを除いて)ブラウザーを特別に構成する必要があるため、パブリックにホストされたサイトには理想的ではありません。

コンテキスト:以前は、jQueryスクリプトwindow.close()はほとんどのブラウザーで問題なく現在のタブを閉じることができました。ただし、最近のブラウザーは、おそらくセキュリティ上の理由から、このスクリプトをサポートしていません。

グーグルクローム:

Chromeはwindow.close()スクリプトの実行を許可しておらず、使用しようとしても何も起こりません。我々はしかしTamperMonkeyプラグインChromeを使用することによりすることができますはwindow.close()メソッドを使用する場合は、あなたが含ま// @grant window.closeTamperMonkeyのUserScriptヘッダに。

たとえば、私のスクリプト(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ファイルでメソッドを直接使用できます。

たとえば、次のスクリプトは設定がtrueに設定されていると完全に機能します。

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

これは、開いている唯一のタブであってもユーザーが現在のタブを閉じることができ、サードパーティのプラグインを必要としないため、Chromeの回避策よりもはるかにうまく機能します。ただし、欠点は、このスクリプトを別のWebサイト(使用する予定のWebサイトだけでなく)でも実行できるため、セキュリティ上の問題が発生する可能性があることです。ただし、現在のタブを閉じることは特に危険だとは思えません。

縁:

残念なことに、Edgeは実際に、私が試した3つすべてのブラウザーの中で最高のパフォーマンスを発揮し、window.close()構成を必要とせずにこのメソッドで動作しました。ときにwindow.close()スクリプトが実行され、追加のポップアップ警告しますページには、現在のタブを閉じるしようとしていることと、続行するかどうかを尋ねます。

ここに画像の説明を入力してください

最終メモ: ChromeとFirefoxの両方のソリューションは、ブラウザーが意図的に無効にされた場合の回避策であり、潜在的にセキュリティ上の理由からです。また、どちらもユーザーが事前に互換性を持つようにブラウザーを構成する必要があるため、公共での使用を目的としたサイトでは現実的ではないかもしれませんが、私のようなローカルでホストされるソリューションには理想的です。

これが役に立てば幸い!:)


5

まだこのページにアクセスしている人は、スクリプトで、またはターゲット_blankのHTMLのアンカータグを使用して開いたタブのみを閉じることができます。どちらも、

<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()しようとしているウィンドウがclose()window.open()メソッドを使用するスクリプトによって開かれた場合にのみ機能します(IEは例外です)。

!(ターゲット_blankのアンカータグについては、以下の@killstreetのコメントを参照してください)

TLDR:chromeとfirefoxでそれらを閉じることができます。

コンソールエラーが発生します。スクリプトは、スクリプトで開かれていないウィンドウを閉じない場合があります。エラーとして、他には何もない。

URLに一意のパラメータを追加して、ページがスクリプトから(時間など)開かれたかどうかを確認できますが、これは単なるハッキングであり、ネイティブ機能ではなく、場合によっては失敗します。

ページがopen()から開かれたかどうかを確認する方法を見つけることができませんでした。閉じるとスローされず、エラーが発生します。 これは「テスト」を出力しません

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

あなたはMDNでclose()関数についてもっと読むことができます


2
スクリプトによって開かれたのはタブだけではありません。ターゲット_blankのアンカータグも閉じることができます。これまでのところ、ChromeとFirefoxでテストされており、どちらもアンカータグによって開かれたタブを閉じることができるようです。
killstreet


-1

これは同じことを解決する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.