Ignorar una cadena de consulta después de una extensión de archivo jQuery

Estoy usando un script que se encuentra aquí: http://www.blastam.com/blog/index.php/2011/04/how-to-track-downloads-in-google-analytics/ para agregar dinámicamente un código de seguimiento de Google Analytic a los enlaces que apuntan a documentos PDF.

Lo implementé y me di cuenta de que todos los documentos PDF en este sitio tienen una cadena de consulta adjunta al final de la URL. Desafortunadamente, este script no reconoce los documentos como PDF debido a las cadenas de consulta. Necesito modificar este script para ignorar la cadena de consulta después de la extensión de archivo .pdf, pero tengo problemas para hacerlo. A continuación se muestra el script que he modificado ligeramente:

var filetypes = /\.(pdf?)$/i;
var baseHref = '';
if (jQuery('base').attr('href') != undefined)
        baseHref = jQuery('base').attr('href');
    jQuery('a').each(function() {
        var href = jQuery(this).attr('href');
        if (href && (href.match(/^https?\:/i)) && (!href.match(document.domain))) {
            jQuery(this).click(function() {
                var extLink = href.replace(/^https?\:\/\//i, '');
                _gaq.push(['_trackEvent', 'External', 'Click', extLink]);
                if (jQuery(this).attr('target') != undefined && jQuery(this).attr('target').toLowerCase() != '_blank') {
                    setTimeout(function() { location.href = href; }, 200);
                    return false;
                }
            });
        }
        else if (href && href.match(filetypes)) {
            jQuery(this).click(function() {
                var extension = (/[.]/.exec(href)) ? /[^.]+$/.exec(href) : undefined;
                var filePath = href;
                _gaq.push(['_trackEvent', 'Download', 'Click-' + extension, filePath]);
                if (jQuery(this).attr('target') != undefined && jQuery(this).attr('target').toLowerCase() != '_blank') {
                    setTimeout(function() { location.href = baseHref + href; }, 200);
                    return false;
            }
        });
    }
});

¿Cuál sería la mejor manera de analizar la URL y detenerse después de encontrar la .pdf ¿extensión?

preguntado el 27 de noviembre de 13 a las 18:11

1 Respuestas

Para eliminar la cadena de consulta antes de buscar la extensión del archivo, puede cambiar esto:

 var extension = (/[.]/.exec(href)) ? /[^.]+$/.exec(href) : undefined;
 var filePath = href;

a esto:

 var fname = href;
 var query = href.indexOf("?");
 if (query !== -1) {
     fname = href.substr(0, query);
 }
 var extension = (/[.]/.exec(fname)) ? /[^.]+$/.exec(fname) : undefined;
 var filePath = fname;

Demostración de trabajo: http://jsfiddle.net/jfriend00/JV78r/

respondido 27 nov., 13:18

Gracias por su respuesta, todavía tengo algunos problemas para inyectar el código de seguimiento en el <a> aunque elemento. Intentando algunas cosas diferentes con su respuesta, informaré con mis hallazgos. - ty bailey

Conseguí que esto funcionara cambiando if (href && href.match(filetypes)) a if (fname && fname.match(filetypes)) en base a su respuesta. ¡Gracias! - ty bailey

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.