SSL Accelerator

Speculatively performs SSL/TLS handshakes for hovered links to speed up browsing.

目前為 2014-08-22 提交的版本,檢視 最新版本

// ==UserScript==
// @name           SSL Accelerator
// @description    Speculatively performs SSL/TLS handshakes for hovered links to speed up browsing.
// @author         Anon
// @version        0.1.0
// @license        Public domain
// @include        *
// @require        https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js
// @require        https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.11.2/URI.min.js
// @grant          GM_xmlhttpRequest
// @grant          GM_log
// @namespace      https://greasyfork.org/users/4614
// ==/UserScript==

var alreadyHandshakedWith = {};

var handshakeStartDelayTimerID = 0;
var currentRequest = null;

var currentHostname = (new URI(window.location.href)).hostname();

$("body").on("mouseenter", "a", function (e)
{
	var targetURI = new URI(e.target.href);
	var targetProtocol = targetURI.protocol();
	var targetHostname = targetURI.hostname();
	
	if (targetProtocol != "https" ||  
		targetHostname == currentHostname)
	{
		return;
	}
	
	if (alreadyHandshakedWith[targetHostname])
	{
		GM_log("Already handshaked with " + targetHostname);
		return;
	}

	clearTimeout(handshakeStartDelayTimerID);
	
	handshakeStartDelayTimerID = setTimeout(function ()
	{
		GM_log("Handshaking with \"" + targetHostname + "\"..");
		
		currentRequest = GM_xmlhttpRequest({
		
			method: "HEAD", 
			
			url: "https://" + targetHostname, 
			
			onload: function() 
			{
				GM_log("Successfuly handshaked with \"" + targetHostname + "\".");
				
				currentRequest = null;
			},
			});
		
		alreadyHandshakedWith[targetHostname] = true;
	}, 100);
});

$("body").on("mouseout", "a", function (e)
{
	clearTimeout(handshakeStartDelayTimerID);
});