我正在使用一个简单的 jQuery 插件,它为每个用户创建一个唯一的指纹,以便我们可以跟踪/识别来自特定推荐 URL 的用户。
它在除 Internet Explorer 9 之外的任何地方都能正常工作(是的,它在 IE7 和 IE8 中工作,即使网页看起来很傻)。
我收到的错误是:
SCRIPT11:该操作试图访问有效范围之外的数据
代码如下(第 21 行第 7 列出现错误)。我将经历这一切并注释掉每个实体,看看它是否是其中一个特别是导致此错误的实体。
谢谢!
( function($) {
// Calling `jQuery.fingerprint()` will return an MD5 hash, i.e. said
// fingerprint.
$.fingerprint = function() {
// This function, `_raw()`, uses several browser details which are
// available to JS here to build a string, namely...
//
// * the user agent
// * screen size
// * color depth
// * the timezone offset
// * sessionStorage support
// * localStorage support
// * the list of all installed plugins (we're using their names,
// descriptions, mime types and file name extensions here)
function _raw() {
// That string is the return value.
return [
navigator.userAgent,
[ screen.height, screen.width, screen.colorDepth ].join("x"),
( new Date() ).getTimezoneOffset(),
!!window.sessionStorage,
!!window.localStorage,
$.map( navigator.plugins, function(p) {
return [
p.name,
p.description,
$.map( p, function(mt) {
return [ mt.type, mt.suffixes ].join("~");
}).join(",")
].join("::");
}).join(";")
].join("###");
}
// `_md5()` computes a MD5 hash using [md5-js](http://github.com/wbond/md5-js/).
function _md5() {
if ( typeof window.md5 === "function" ) {
// The return value is the hashed fingerprint string.
return md5( _raw() );
}
else {
// If `window.md5()` isn't available, an error is thrown.
throw "md5 unavailable, please get it from http://github.com/wbond/md5-js/";
}
}
// And, since I'm lazy, calling `$.fingerprint()` will return the hash
// right away, without the need for any other calls.
return _md5();
}
})(jQuery);