HTMLダイアログ無効化

JavaScriptによるリンクを新しいウィンドウではなく新しいタブで開く / Always opens JavaScript links in new tab in current window instead of new window.

当前为 2014-07-14 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        HTMLダイアログ無効化
// @version     2.1.2
// @namespace   http://userscripts.org/users/347021
// @id          block-new-window-347021
// @description JavaScriptによるリンクを新しいウィンドウではなく新しいタブで開く / Always opens JavaScript links in new tab in current window instead of new window.
// @match       *
// @grant       none
// @run-at      document-start
// @icon        https://secure.pokemori.jp/greasyfork-271-icon.ico
// @icon        data:image/vnd.microsoft.icon;base64,AAABAAEAICAQAAEABACkAgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAgAAAAIAgGAAAAc3p69AAAAmtJREFUWIXFV7uS0zAUPU682Em0Q0lJwzfQUvELW2zHzD4GhtkPoOcPttnZD2GGhp6CYn8jW2Aix3KIIwr7Xl/LsomdhZyZjCTb0jnn3ivZCXAEXF1fcn9yDAESoXvh9u7eDl3k4/Vl8CQCbu/u7Yerd2PWsWNFtCIAABudjllrFLwCikjtvcA0108vYJprJCbD83jW24aIsYhHpx+AZxdsdMokqbGdbYgYW5iDyIEqArLyi0ghNBaJyQAAScWRGCBEzNfLKIDHQ3fPw4/vABBwCi7Oz1BECjpZVsrixoQtDLYw7JxSsIXBxfnZINcAcFMKqGsgMRlCY6G1hlIKP/UjlFI8phYA90kQRWFfSHMsQGsNQIt+V9u8RuNhqOewgC9fv41Y6HCwgJev3/xX4ge3Bt6+etF6qIgUprnmVgcKQbaCnZ0iyFYAAD1pH1ppvvOSrnNb3a83DAvoOv2KSCHbAAjK+3Z2yq1cSBIvogn313l7dy6i+vDqfR1nm7o/eyaJ/MRd4+Y925i/9/fA46oO3yIKGotIxwSf8/LZ5tHtFSCdU19OlOQy7H3E5NyNXutllG3KcEsRPmIid93Po4BFuGLIxFL/JQUkwiVWu/ahI4uNfvOKKHWq3hcBFuA6dsdpbqEnigmla0lKY1+tEOYnHgG+sPsm+yDDTugiX/8ufy0BvpyrnRbhqx1T7n25dsPuEkv3QMcXEU/2nHKE5a9ikPP5Sds9sOc54Kt2wL/lutLmc98S4FapG/YuUt9cSdwHFkBVK+G6dqvdzTfNJ1JyLccuuAY+f3rfL/UfgQQc9m19AI7+5/ToAv4AYk+4QlI5O3QAAAAASUVORK5CYII=
// @icon        https://greasyfork.org/assets/blacklogo96-0596aff6108f83c3073764496d7768ec.png
// @author      100の人
// @homepage    https://greasyfork.org/ja/scripts/271-html%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E7%84%A1%E5%8A%B9%E5%8C%96
// @license     Creative Commons Attribution 4.0 International Public License; http://creativecommons.org/licenses/by/4.0/
// ==/UserScript==

(function(){
'use strict';

var WindowPrototype = Window.prototype;

try {
	WindowPrototype.open = new Proxy(WindowPrototype.open, {
		apply: function (open, windowInstance, argumentList) {
			if (2 in argumentList) {
				argumentList[2] = '';
			}
			return open.apply(windowInstance, argumentList);
		},
	});

	WindowPrototype.showModalDialog = new Proxy(WindowPrototype.showModalDialog, {
		apply: function (showModalDialog, windowInstance, argumentList) {
			if (argumentList.length === 0) {
				throw new TypeError('Not enough arguments to Window.showModalDialog.');
			}

			var warningMessage;
			switch (window.navigator.language) {
				case 'an':
					warningMessage = 'L\'uso de window.showModalDialog() ye obsoleto. Faiga servir en cuenta window.open(). Ta saber-ne mas, consulte https://developer.mozilla.org/en-US/docs/Web/API/Window.open .';
					break;
				case 'as':
					warningMessage = 'window.showModalDialog() ৰ ব্যৱহাৰ স্খলিত হৈছে। ইয়াৰ পৰিৱৰ্তে window.open() ব্যৱহাৰ কৰক। অধিক সহায়ৰ বাবে https://developer.mozilla.org/en-US/docs/Web/API/Window.open চাওক';
					break;
				case 'ast':
					warningMessage = 'L\'usu de window.showModalDialog() ta desaprobáu. Usa window.open() en so llugar. Pa más ayuda, https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'be':
					warningMessage = 'Ужыванне window.showModalDialog() асуджана. Скарыстайце window.open() замест. Больш падрабязныя звесткі на https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'bg':
					warningMessage = 'Употребата на window.showModalDialog() е остаряла. Вместо това използвайте window.open(). За повече информация https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'bn-BD':
					warningMessage = 'window.showModalDialog() এর ব্যবহার অসমর্থিত হয়েছে। পরিবর্তে window.open() ব্যবহার করুন। আরো সহায়তার জন্য https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'bn-IN':
					warningMessage = 'window.showModalDialog() এর ব্যবহার অবচিত হয়েছে | পরিবর্তে window.open() ব্যবহার করুন।অধিক সহায়তার জন্য https://developer.mozilla.org/en-US/docs/Web/API/Window.open পড়ুন।';
					break;
				case 'br':
					warningMessage = 'Diamzeret eo arver eus window.showModalDialog(). Arverit window.open() en e lec\'h. Gweladennit https://developer.mozilla.org/en-US/docs/Web/API/Window.open evit kaout muioc\'h a ditouroù.';
					break;
				case 'ca':
					warningMessage = 'window.showModalDialog() està en desús. Utilitzeu window.open(). Per a més ajuda, visiteu https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'cs':
					warningMessage = 'Použití window.showModalDialog() je zastaralé. Používejte raději window.open(). Více informací na https://developer.mozilla.org/en-US/docs/Web/API/Window.open  ';
					break;
				case 'cy':
					warningMessage = 'Mae\'r defnydd o window.showModalDialog() yn anghymeradwy. Defnyddiwch window.open() yn lle hynny. Am gymorth pellach https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'da':
					warningMessage = 'Brug af window.showModalDialog() er forældet. Brug i stedet window.open(). Læs mere på https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'de':
					warningMessage = 'Window.showModalDialog() sollte nicht mehr verwendet werden. Verwenden Sie window.open() stattdessen. Weitere Hilfe finden Sie unter https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'dsb':
					warningMessage = 'Wužywanje window.showModalDialog() jo zestarjone. Wužyjśo window.open() město togo. Za dalšnu pomoc glejśo https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'es-AR':
					warningMessage = 'El uso de window.showModalDialog() es obsoleto. Use window.open() en su lugar. Para más ayuda https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'es-CL':
					warningMessage = 'El uso de window.showModalDialog() está desaprobado. Use en su lugar window.open(). Para más ayuda https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'es-ES':
					warningMessage = 'El uso de window.showModalDialog() está desaprobado. Use window.open() en su lugar. Para más ayuda, https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'es-MX':
					warningMessage = 'El uso de window.showModalDialog() es obsoleto. Usa window.open() en su lugar. Para más ayuda visita https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'eu':
					warningMessage = 'Zaharkituta dago window.showModalDialog() erabiltzea. Honen ordez, erabili window.open(). Laguntza gehiagorako: https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'ff':
					warningMessage = 'Huutoraade  window.showModalDialog() natti. Huutoro Use window.open(). Ngam ɓeyditoraade ballal https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'fr':
					warningMessage = 'L\'utilisation de « window.showModalDialog() » est obsolète. Utiliser « window.open() » à la place. Consulter https://developer.mozilla.org/en-US/docs/Web/API/Window.open pour plus d\'informations.';
					break;
				case 'fy-NL':
					warningMessage = 'Gebrûk fan window.showModalDialog() wurdt net mear stipe. Gebrûk yn ste dêrfan window.open(). Sjoch https://developer.mozilla.org/en-US/docs/Web/API/Window.open voor meer informatie';
					break;
				case 'hr':
					warningMessage = 'Upotreba window.showModalDialog() je zastarjela. Koristite window.open(). Za pomoć posjetite https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'hsb':
					warningMessage = 'Wužiwanje window.showModalDialog() je zestarjene. Wužijće window.open() město toho. Za dalšu pomoc hlej https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'hu':
					warningMessage = 'A window.showModalDialog() használata elavult. Használja inkább a window.open() metódust. További segítség: https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'hy-AM':
					warningMessage = 'window.showModalDialog()-ի օգտագործումը չի խրախուսվում: Փոխարենը օգտագործեք window.open()-ը: Մանրամասները՝ https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'id':
					warningMessage = 'Penggunan window.showModalDialog() tidak disarankan lagi. Gunakan window.open(). Untuk bantuan kunjungi https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'is':
					warningMessage = 'Notkun á window.showModalDialog() er úreld. Notaðu window.open() í staðinn. Fyrir meiri upplýsingar https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'it':
					warningMessage = 'L’utilizzo di window.showModalDialog() è deprecato. Al suo posto utilizzare window.open(). Per ulteriori informazioni consultare https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'ja':
				case 'ja-JP':
				case 'ja-JP-mac':
					warningMessage = 'window.showModalDialog() の使用は推奨されません。代わりに window.open() を使用してください。詳しくは https://developer.mozilla.org/en-US/docs/Web/API/Window.open を参照してください。';
					break;
				case 'kk':
					warningMessage = 'Window.showModalDialog() қолдану ескірген. Оның орнына window.open() қолданыңыз. Көбірек білу үшін https://developer.mozilla.org/en-US/docs/Web/API/Window.open ';
					break;
				case 'km':
					warningMessage = 'ការ​ប្រើ window.showModalDialog() ត្រូវ​បាន​បដិសេធ។ ប្រើ window.open() ជំនួស។ ឧទាហរណ៍​ជំនួយ https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'ko':
					warningMessage = 'window.showModalDialog()는 더이상 사용하지 않습니다. 대신 window.open()를 사용해 주십시오. 더 자세한 사항은 https://developer.mozilla.org/en-US/docs/Web/API/Window.open 를 참고해 주십시오.';
					break;
				case 'lij':
					warningMessage = 'L\'ûzo de window.showModalDialog() o l\'é deprecòu. Dêuvia in càngio window.open(). Pe avéi âtre informaçioìn amîa https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'lt':
					warningMessage = 'Metodas „window.showModalDialog()“ yra nenaudotinas. Vietoje jo nudokite „window.open()“. Daugiau informacijos – https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'lv':
					warningMessage = 'window.showModalDialog() izmantošana ir novecojusi.  Izmantojiet window.open(). Papildus informācija https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'ml':
					warningMessage = 'ജാലകത്തിന്റെ ഉപയോഗം.showModalDialog() ഒഴിവാക്കി. ജാലകം ഉപയോഗിക്കുക. തുറക്കുക() പകരം. കൂടുതൽ സഹായത്തിനു https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'ms':
					warningMessage = 'Penggunaan window.showModalDialog() adalah usang. Sebaliknya gunakan window.open(). Untuk bantuan lanjut https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'nb-NO':
					warningMessage = 'Bruk av window.showModalDialog() er frarådet. Bruk window.open() isteden. For mer hjelp les https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'nl':
					warningMessage = 'Gebruik van window.showModalDialog() wordt niet meer ondersteund. Gebruik in plaats daarvan window.open(). Zie https://developer.mozilla.org/en-US/docs/Web/API/Window.open voor meer informatie';
					break;
				case 'nn-NO':
					warningMessage = 'Bruk av window.showModalDialog() er frarådd. Bruk window.open() i staden. For meir hjelp les https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'or':
					warningMessage = 'window.showModalDialog() ର ବ୍ୟବହାର ପୁରୁଣା ହୋଇଛି। ଏହା ପରିବର୍ତ୍ତେ window.open() କୁ ବ୍ୟବହାର କରନ୍ତୁ।ଅଧିକ ସହାୟତା ପାଇଁ https://developer.mozilla.org/en-US/docs/Web/API/Window.open କୁ ଦେଖନ୍ତୁ';
					break;
				case 'pl':
					warningMessage = 'Metoda „window.showModalDialog()” jest przestarzała. Zamiast niej należy używać metody „window.open()”. Więcej informacji: https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'pt-BR':
					warningMessage = 'window.showModalDialog() não deve mais ser usado. No lugar, use window.open(). Mais informações em https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'pt-PT':
					warningMessage = 'O uso de window.showModalDialog() está obsoleto. Em alternativa use window.open(). Para mais ajuda https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'rm':
					warningMessage = 'window.showModalDialog() na duess betg pli vegnir utilisà, utilisescha empè window.open(). Per ulteriur agid https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'ru':
					warningMessage = 'Метод window.showModalDialog() является устаревшим. Для его замены используйте метод window.open(). Более подробная информация доступна на https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'sk':
					warningMessage = 'Používanie window.showModalDialog() je zavrhnuté. Používajte radšej window.open(). Ďalšie informácie na stránke https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'sl':
					warningMessage = 'Uporaba window.showModalDialog() je zastarela. Uporabite window.open(). Za več informacij si oglejte https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'sq':
					warningMessage = 'Përdorimi i window.showModalDialog() është i vjetruar. Në vend të tij përdorni window.open(). Për më tepër ndihmë shihni https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'sr':
					warningMessage = 'Коришћење window.showModalDialog() је застарело. Користите window.open(). За помоћ https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'sv-SE':
					warningMessage = 'Bruket av window.showModalDialog() är förlegat. Använd window.open() i stället. För mer hjälp, se https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'ta':
					warningMessage = 'window.showModalDialog() ஐ பயன்படுத்துவது வழக்கொழிந்தது.மாற்றாக window.open()ஐ பயன்படுத்தவும். மேலும் உதவிக்கு https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'te':
					warningMessage = 'window.showModalDialog() వినియోగం ఆపబడింది. బదులుగా window.open() ఉపయోగించు. మరింత సహాయం కొరకు https://developer.mozilla.org/en-US/docs/Web/API/Window.open చూడండి.';
					break;
				case 'tr':
					warningMessage = 'indow.showModalDialog() kullanımı eskidi. Onun yerine window.open() kullanın. Daha fazla bilgi için: https://developer.mozilla.org/tr/docs/Web/API/Window.open';
					break;
				case 'uz':
					warningMessage = 'window.showModalDialog()’dan foydalanish eskirgan. O‘rniga window.open()’dan foydalaning. Ko‘proq yordam olish uchun https://developer.mozilla.org/en-US/docs/Web/API/Window.open saytiga kiring';
					break;
				case 'xh':
					warningMessage = 'Ukusetyenziswa kwe-window.showModalDialog() akwamkelwanga. Sebenzisa i-window.open() endaweni yayo. Ukuze ufumane uncedo olungakumbi https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'zh-CN':
					warningMessage = 'window.showModalDialog() 已废弃。请使用 window.open() 代替。更多信息见 https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				case 'zh-TW':
					warningMessage = '已棄用 window.showModalDialog(),請改用 window.open。若需更多資訊請參考 https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
					break;
				default:
					warningMessage = 'Use of window.showModalDialog() is deprecated. Use window.open() instead. For more help https://developer.mozilla.org/en-US/docs/Web/API/Window.open';
			}
			console.warn(warningMessage);

			var newTab = windowInstance.open(argumentList[0]);
			if (newTab) {
				// ポップアップブロックされていなければ
				newTab.dialogArguments = argumentList[1];
			}
		},
	});
} catch (e) {
	if (e.message === 'Proxy is not defined') {
		// Opera、Google Chrome
		var _open = WindowPrototype.open;

		WindowPrototype.open = function () {
			if (2 in arguments) {
				delete arguments[2];
			}
			return _open.apply(this, arguments);
		};

		WindowPrototype.showModalDialog = function (url) {
			console.warn('Chromium is considering deprecating showModalDialog. Please use window.open and postMessage instead.');
			var newTab = _open.call(this, url);
			if (newTab) {
				// ポップアップブロックされていなければ
				newTab.dialogArguments = arguments[1];
			}
		};
	} else {
		throw e;
	}
}

})();