Реферер facebook - это исключение, а не правило, верно? Поэтому я хотел бы рассмотреть замену этих двух блоков условий так, чтобы else
- это то, что происходит, когда это обычный сценарий, а не наличие else
для необычного сценария. Вам также следует запускать test
только для части имени хоста URL-адреса ссылающегося сайта, которую можно получить, анализируя URL-адрес в объекте URL
. Кроме того, одно из ваших условий имеет значение src
, установленное на img1
вместо img1.jpg
, как указано cngodles. Это похоже на недосмотр, поэтому давайте предположим, что вы имели в виду img1.jpg
. Собрав все воедино, реорганизованный код будет выглядеть так:
try {
var referrerHostName = new URL(document.referrer).hostname;
} catch {
var referrerHostName = "";
}
if (/facebook\.com/.test(referrerHostName)) {
jQuery('#staffImage img').attr('src', 'img2.jpg');
} else {
jQuery('#staffImage img').attr('src', 'img1.jpg');
}
Следует также учитывать, что document.referrer
происходит из заголовка Referrer
, что означает, что Referrer может быть подделан. Он также может быть пустым при многих обстоятельствах, в том числе, когда браузеры настроены не отправлять заголовки Referrer в качестве дополнительной меры конфиденциальности. Например, если вы нажмете на ссылку URL
, которую я предоставил выше, и на этой странице попробуйте console.log(document.referrer)
, это будет пустая строка, поскольку SO автоматически устанавливает атрибут rel="nofollow noreferrer"
для ссылок, предоставленных в ответах.
Это все, что говорит о том, что если вы хотите предоставить что-то безопасное или конфиденциальное для определенных запросов, использование document.referrer не является хорошим способом сделать это. Однако, если вам просто нужен другой пользовательский интерфейс, который отлично подходит для тех, кто не использует Facebook, а не тот, который вы имели в виду, это совершенно хороший подход.