ブラウザの他のタブを閉じずに、ブラウザの現在アクティブなタブを閉じるリンクをWebページに作成したいと考えています。
ユーザーが閉じるリンクをクリックすると、「はい」と「いいえ」の2つのボタンで確認を求める警告メッセージが表示されます。ユーザーが「はい」をクリックした場合はそのページを閉じ、「いいえ」の場合は何もしません。
どうすればできますか?助言がありますか?
ブラウザの他のタブを閉じずに、ブラウザの現在アクティブなタブを閉じるリンクをWebページに作成したいと考えています。
ユーザーが閉じるリンクをクリックすると、「はい」と「いいえ」の2つのボタンで確認を求める警告メッセージが表示されます。ユーザーが「はい」をクリックした場合はそのページを閉じ、「いいえ」の場合は何もしません。
どうすればできますか?助言がありますか?
回答:
これを行うには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がユーザーに確認を求めると思います。他のブラウザは異なる場合があります。
about:config
dom.allow_scripts_to_close_windows = true
Firefoxでソリューションが(大きなセキュリティリスクであるかもしれない!)かもしれない
<button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button>
また、この記事を参照してください
これを試して
<a href="javascript:window.open('','_self').close();">close</a>
この方法は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>
open(location, '_self').close();
私の知る限りでは、ChromeやFireFoxでは不可能です。IEでもまだ可能です(少なくともEdge以前)。
<button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button>
また、この記事を参照してください
可能です。私はこれをネット全体で検索しましたが、マイクロソフトの調査の1つを行ったときに、ようやく答えが得られました。
これを試して:
window.top.close();
これにより、現在のタブが閉じます。
FF 18とChrome 24で正常にテストされました:
頭に挿入:
<script>
function closeWindow() {
window.open('','_parent','');
window.close();
}
</script>
HTML:
<a href="javascript:closeWindow();">Close Window</a>
クレジットはMarcos J. Drakeに送られます。
Chrome 41では次のように動作します:
function leave() {
var myWindow = window.open("", "_self");
myWindow.document.write("");
setTimeout (function() {myWindow.close();},1000);
}
私は実際のWebページを開くことを含むFFのいくつかのアイデアを試しましたが、何も機能しないようです。私が理解している限り、ブラウザが本当に xxx.close()でタブまたはウィンドウを閉じます JSによって開かれたが、少なくともFFは、そのタブ内の新しいコンテンツを開いてタブを閉じることはできません。
あなたがそれについて考えるとき、それは理にかなっています-ユーザーがJSが有用な履歴を持つタブまたはウィンドウを閉じることを望まないかもしれません。
これをネクロポストして申し訳ありませんが、最近、現在ホストされているブラウザのタブを閉じる機能を必要とするローカルにホストされたサイトを実装しました。
注意:これらの回避策はローカルにホストされたサイトを念頭に置いて行われ、(Edgeを除いて)ブラウザーを特別に構成する必要があるため、パブリックにホストされたサイトには理想的ではありません。
コンテキスト:以前は、jQueryスクリプトwindow.close()
はほとんどのブラウザーで問題なく現在のタブを閉じることができました。ただし、最近のブラウザーは、おそらくセキュリティ上の理由から、このスクリプトをサポートしていません。
Chromeはwindow.close()スクリプトの実行を許可しておらず、使用しようとしても何も起こりません。我々はしかしTamperMonkeyプラグインChromeを使用することによりすることができますはwindow.close()メソッドを使用する場合は、あなたが含ま// @grant window.close
TamperMonkeyの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には、スクリプトがウィンドウを閉じることを可能にするために有効にできる詳細設定があり、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の両方のソリューションは、ブラウザーが意図的に無効にされた場合の回避策であり、潜在的にセキュリティ上の理由からです。また、どちらもユーザーが事前に互換性を持つようにブラウザーを構成する必要があるため、公共での使用を目的としたサイトでは現実的ではないかもしれませんが、私のようなローカルでホストされるソリューションには理想的です。
これが役に立てば幸い!:)
まだこのページにアクセスしている人は、スクリプトで、またはターゲット_blankのHTMLのアンカータグを使用して開いたタブのみを閉じることができます。どちらも、
<script>
window.close();
</script>
少し遅れましたが、これは私が見つけたものです...
window.close()
しようとしているウィンドウがclose()
window.open()メソッドを使用するスクリプトによって開かれた場合にのみ機能します(IEは例外です)。
!(ターゲット_blankのアンカータグについては、以下の@killstreetのコメントを参照してください)
TLDR:chromeとfirefoxでそれらを閉じることができます。
コンソールエラーが発生します。スクリプトは、スクリプトで開かれていないウィンドウを閉じない場合があります。エラーとして、他には何もない。
URLに一意のパラメータを追加して、ページがスクリプトから(時間など)開かれたかどうかを確認できますが、これは単なるハッキングであり、ネイティブ機能ではなく、場合によっては失敗します。
ページがopen()から開かれたかどうかを確認する方法を見つけることができませんでした。閉じるとスローされず、エラーが発生します。 これは「テスト」を出力しません:
try{
window.close();
}
catch (e){
console.log("text");
}
あなたはMDNでclose()関数についてもっと読むことができます
このようなリンクを作成する方法は次のとおりです。
<a href="javascript:if(confirm('Close window?'))window.close()">close</a>
これは同じことを解決する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>