Помогите изменить рефакторинг небольшого фрагмента кода Javascript, который идентифицирует источник реферера пользователя - PullRequest
0 голосов
/ 09 марта 2011

Я написал следующий небольшой фрагмент javascript (на основе превосходной функции parseURI ), чтобы определить, откуда появился пользователь. Я новичок в Javascript, и хотя приведенный ниже код работает, мне было интересно, есть ли более эффективный метод для достижения этого же результата?

try {
        var path = parseUri(window.location).path;

        var host = parseUri(document.referrer).host;
        if (host == '') {
                alert('no referrer');
                }

        else if (host.search(/google/) != -1 || host.search(/bing/) != -1 || host.search(/yahoo/) != -1) {
                alert('Search Engine');
                }
        else {
                alert('other');
                }
        } 

catch(err) {}

Ответы [ 2 ]

2 голосов
/ 09 марта 2011

Вы можете упростить проверку хоста с помощью альтернативного поиска:

else if (host.search(/google|bing|yahoo/) != -1 {

У меня также возникнет соблазн протестировать реферер документов перед извлечением хоста для вашей ошибки «без реферера».

(Я не проверял это).

0 голосов
/ 09 марта 2011

Я заканчиваю тем, что определяю функцию с именем set во многих моих проектах. Это выглядит так:

function set() {
    var result = {};
    for (var i = 0; i < arguments.length; i++)
        result[arguments[i]] = true;
    return result;
}

Как только вы получите ту часть имени хоста, которую вы ищете ...

// low-fi way to grab the domain name without a regex; this assumes that the
// value before the final "." is the name that you want, so this doesn't work
// with .co.uk domains, for example
var domain = parseUri(document.referrer).host.split(".").slice(-2, 1)[0];

... вы можете элегантно проверить свой результат по списку, используя JavaScript-оператор in и функцию set, которую мы определили выше:

if (domain in set("google", "bing", "yahoo"))
    // do stuff

Дополнительная информация:

...