Почему тег сценария для аутентификации LinkedIn не является допустимым JavaScript? - PullRequest
0 голосов
/ 27 мая 2018

Руководство LinkedIn по настройке аутентификации с помощью Javascript SDK показывает пример кода, но очень запутано, что на самом деле имеет в виду автор.

<script type="text/javascript" src="//platform.linkedin.com/in.js">
    api_key:   [API_KEY]
    onLoad:    [ONLOAD]
    authorize: [AUTHORIZE]
    lang:      [LANG_LOCALE]
</script>

Это недопустимый JS, запятые отсутствуют, кавычки опущены.Кроме того, в примере показаны скобки, но они должны быть опущены, иначе будет выдано сообщение об ошибке.Реальный пример уменьшит путаницу, но, конечно, ничего не предоставлено.

Вот правильный пример, но с использованием готового ключа API (ключ API - то же самое, что идентификатор клиента -руководство не пытается объяснить это)

<script type="text/javascript" src="//platform.linkedin.com/in.js">
    api_key: 93h7nnksxj3ccd
    authorize: true
    lang: en_US
</script>

Как вы можете видеть с этим другим таким вопросом , я не единственный, кто запутался, этот парень думал, чтото же самое, что я сделал, то есть кавычки.

Как на самом деле работает этот код?Считается ли это допустимым синтаксисом для тега сценария, который имеет тип text/javascript?

[править] Re: возможно дублирование, кажется, это не так.Смотрите выбранный ответ.[/ Править]

1 Ответ

0 голосов
/ 28 мая 2018

Внешний скрипт читает и анализирует тег скрипта innerHTML напрямую.Об этом рассказывает статья в блоге Роджер Ху :

В статье рассматривается JavaScript LinkedIn и указывается используемый синтаксический анализатор:

В основном приведенный ниже код извлекает innerHTML, а затем задает переменные r и K как пары ключ / значение.Пробелы удаляются с помощью функции replace ().

Вот краткое описание, за которым следуют более длинные выдержки:

Данные извлекаются необработанными из innerHTML:

l = f.innerHTML.replace(A, n)

Определяется регулярное выражение для каждой строки:

g = (/^[\s]*(.*?)[\s]*:[\s]*(.*)[\s]*$/),

Используется для каждой строки, устанавливая r для клавиши и K для значения.

W = s.match(g);
r = W[1].replace(A, n);
K = W[2].replace(A, n)

Если совпадений нет, выдается следующая ошибка:

script tag contents must be key/value pairs separated by a colon.

Большая выдержка:

for (U = 0, q = t.length; U < q; U++) {
    var f = t[U];
    if (!m.test(f.src)) {
        continue
    }
    if (b.test(f.src)) {
        c = true
    }
    try {
        l = f.innerHTML.replace(A, n)
    } catch (z) {
        try {
            l = f.text.replace(A, n)
        } catch (y) {}
    }
}
l = l.replace(J, "$1").replace(A, n).replace(F, n);
ab = C.test(l.replace(j, n));
for (var U = 0, T = l.split(k), q = T.length; U < q; U++) {
    var s = T[U];
    if (!s || s.replace(j, n).length <= 0) {
        continue
    }
    try {
        W = s.match(g);
        r = W[1].replace(A, n);
        K = W[2].replace(A, n)
    } catch (Y) {
        if (!ab) {
            console.warn("script tag contents must be key/value pairs separated by a colon. Source: " + Y)
        }
        continue
    }
    N(r, K)
}

Набор регулярных выражений определяется в верхней частискрипт:

var S = {
        "bootstrapInit": +new Date()
    },
    p = document,
    m = (/^https?:\/\/.*?linkedin.*?\/in\.js.*?$/),
    b = (/async=true/),
    D = (/^https:\/\//),
    J = (/\/\*((?:.|[\s])*?)\*\//m),
    F = (/\r/g),
    j = (/[\s]/g),
    g = (/^[\s]*(.*?)[\s]*:[\s]*(.*)[\s]*$/),
    x = (/_([a-z])/gi),
    A = (/^[\s]+|[\s]+$/g),
    u = (/^[a-z]{2}(_)[A-Z]{2}$/),
    C = (/suppress(Warnings|_warnings):true/gi),
    d = (/^api(Key|_key)$/gi),
...